Haskell程序中比其他语言更容易/更容易出现的各种错误?

mis*_*bee 9 haskell

其中一个受到高度关注的特性是,如果一个程序编译,它很可能大部分是正确的,比用不太复杂或严格类型系统的语言编写的程序更为正确.

也就是说,Haskell是一个将运行时错误转换为编译器错误的系统:-)

我想知道,Haskell中的编程是否会导致程序员在一种不太强类型的语言中引入一个运行时错误,而该错误没有明显的模拟(外观和频率)?

一些基本的例子突然出现在我脑海中:(不是很好,我正在寻找关于警惕的建议)

  • 由于懒惰导致的渐近性能错误
  • 由于错误结构的递归导致的无限循环
  • fundeps/type-families将逻辑推入类型级别,其中代码更"神秘",错误更难发现?

其他/更好的陷阱的例子?

Joa*_*ner 7

它不一定是渐近的,但是由于懒惰造成的空间泄漏是Haskell的实际应用中的一个问题.我知道Haskell使用的公司完全切换到严格的数据类型(同时仍然使用函数参数的懒惰).

有关该视图的来源,请参阅:

  • E. Hesselink.丝绸:使sematic web功能齐全.功能编程Exchange 2012,伦敦,2012年3月.
  • CJ桑普森.经验报告:Haskell在"现实世界"中:在懒惰的功能语言中编写商业应用程序.在ICFP '09,第185-190页,2009年.
  • S. Wehr.Kommerzielle Softwareentwicklung mit Haskell.Hal6,莱比锡,2011年10月.幻灯片(德语).

  • @GaneshSittampalam:来自该PDF的金钱报价:"严格的语义学的主要缺点,就是他们的经验,是模块化构成的增加的困难." 确实. (3认同)
  • 渣打银行的Mu是严格使用Haskell的一个例子:http://anil.recoil.org/papers/2011-cufp-scribe-preprint.pdf (2认同)