小编Pea*_*ker的帖子

未提升型产品的缺点?

在Haskell中,提升型产品意味着(a,b,c)和(a,(b,c))之间存在语义差异.

如果所有产品的所有模式匹配总是无可辩驳的,则没有区别,(a,b,c)可能是(a,(b,c))的语法糖.

为什么Haskell会选择升降式产品?

haskell types programming-languages functional-programming lazy-evaluation

16
推荐指数
2
解决办法
590
查看次数

Rank2Types/RankNTypes是否在没有多型变量的情况下实用?

由于类型变量不能保存多类型,因此使用Rank*Types似乎不能重复使用现有函数,因为它们具有monotype限制.

例如,当中间类型是多类型时,我们不能使用函数(.).我们被迫在现场重新实施(.).这对于(.)来说当然是微不足道的,但对于更多实体代码来说却是一个问题.

我还认为((f.g)x)不等于(f(gx))对参考透明度及其益处的严重打击.

在我看来,这是一个显示停止问题,并且似乎使Rank*Types扩展几乎不适合广泛使用.

我错过了什么吗?是否有计划使Rank*Types与类型系统的其他部分更好地交互?

编辑:你如何使(runST.永远)的类型工作?

polymorphism haskell types type-systems

16
推荐指数
3
解决办法
1052
查看次数

OS X上的Haskell SDL

OS X上的SDL使用预处理器技巧使main()用自己的入口点重载,用Objective C编写,调用用户的main.

这些技巧使非C SDL用户(例如:Haskell绑定)的生命变得非常困难.

有这么好的理由吗?

为什么SDL不能在SDL_init中执行Objective-C Cocoa初始化?

macos haskell sdl

7
推荐指数
1
解决办法
763
查看次数

元组爆炸模式

我明白在:

f x = x + 1 where !y = undefined

爆炸模式的含义y是以前要评估的f.

同理:

f x = x + 1 where !(!a, !b) = (undefined, undefined)

意思是一样的,wrt xy.

但爆炸模式意味着什么:

f x = x + 1 where (!a, !b) = (undefined, undefined)

它似乎不会导致未定义被评估.In-tuple爆炸模式什么时候开始生效?如果强制模式的元组?谁能给其中一个例子(!a, !b) = (..)不同于(a, b) = (..)

haskell pattern-matching

7
推荐指数
2
解决办法
1207
查看次数