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

我已经有几次有GHC告诉我使用扩展的经验,只是发现,当使用扩展时,我已经使代码更加复杂,当一个简单的重构允许我坚持使用Haskell 98(现在2010 ),并有一个更直接的解决scheme。

另一方面,有些时候GADT或Rank2Types(很lessRankNTypes)使得代码less得多,代码更简洁。

哪种扩展通常会掩盖更好的devise的可能性,并且通常会改进它? 如果有两者兼而有之,那么在决定使用该扩展之前,用户应该寻找什么(确定他们打算的解决scheme是真是假)?

(另请参阅我应该使用GHC Haskell扩展吗? )

一个道德“良好”的延伸,道德上“坏”的特设清单 – 这是一个美学判断!

  • GADTs
  • 并行列表parsing
  • 模式卫兵
  • Monad理解
  • 元组部分
  • logging通配符
  • 空数据删除
  • 存在types
  • 广义新型派生
  • MPTC + FD
  • types家庭
  • 明确的量化
  • 更高级别的多态性
  • 词法分析tyvars
  • 爆炸模式

坏的

  • SQL理解
  • 隐式参数

(但必要)

  • 模板Haskell
  • 无箱子types和元组
  • 不可判断的,重叠和不连贯的情况 – 通常意味着你有一个错误的devise。

不确定

  • 箭头符号
  • 查看模式