用户应该使用/避免哪些Haskell(GHC)扩展?

时间:2012-06-01 06:02:28

标签: haskell language-extension

我已经有过几次GHC告诉我使用扩展的经验,但却发现当使用该扩展时,我使代码变得更复杂,因为简单的重构会让我坚持使用Haskell 98(现在2010)并有一个更直接的解决方案。

另一方面,有时GADT或Rank2Types(很少是RankNTypes)的工作量少得多,代码也更清晰。

哪些扩展通常会掩盖更好设计的可能性,并且通常会改善它?如果有一些同时执行这两项工作,那么在决定使用该扩展之前,用户应该寻找什么(确定它们是否适用于他们想要的解决方案?)

(另见Should I use GHC Haskell extensions or not?

1 个答案:

答案 0 :(得分:53)

道德“好”扩展和道德“坏”扩展的临时列表 - 这是一种美学判断!

  • GADTs
  • 平行列表理解
  • 图案警卫
  • Monad comprehensions
  • 元组部分
  • 记录外卡
  • 空数据递减
  • 存在类型
  • 广义新类型派生
  • MPTC + FDs
  • 输入家庭
  • 明确量化
  • 更高等级的多态性
  • Lexical scoped tyvars
  • Bang Patterns

错误

  • SQL comprehensions
  • 隐式参数

丑陋(但必要)

  • 模板Haskell
  • 未装箱的类型和元组
  • 不可判定,重叠且不连贯的实例 - 通常意味着您的设计错误。

不确定

  • 箭头符号
  • 查看模式