用户应该使用哪种哈斯克尔(GHC)扩展/避免?(Which Haskell (GHC) extens

2019-06-25 02:00发布

我有过这样的经历,现在几次有GHC告诉我用的延伸,却意外地发现,当使用该扩展我做的代码复杂得多,当一个简单的重构将允许我坚持哈斯克尔98(现2010 ),并有一个更简单的解决方案。

在另一方面,也有时候GADT的或Rank2Types(很少RankNTypes)就少得多的工作和更清洁的代码。

其扩展一般倾向于掩盖了更好的设计的可能性,并普遍提高了吗? 如果有一些两者都做,什么应用户寻找(确保其真实与否,他们正打算解决方案的真正的)决定使用该扩展之前?

(参见我应该使用GHC Haskell的扩展或不呢? )

Answer 1:

道德上“坏”的道德上的“好”扩展的临时列表, - 这是一个审美判断!

  • GADTs
  • 并行列表内涵
  • 模式卫士
  • Monad的内涵
  • 元组部分
  • 记录外卡
  • 空数据decls
  • 存在主义类型
  • 广义新型推导
  • MPTCs +文件描述符
  • 家庭型
  • 明确的量化
  • 更高级别的多态性
  • 词法范围tyvars
  • 邦模式

  • SQL内涵
  • 隐参数

丑陋的 (但需要)

  • 模板哈斯克尔
  • 拆箱类型和元组
  • 不可判定的,重叠的和不连贯的情况下 - 通常意味着你有一个misdesign。

不确定

  • 箭头符号
  • 查看模式


文章来源: Which Haskell (GHC) extensions should users use/avoid?