64

我有几次让 GHC 告诉我使用扩展的经验,只是发现在使用该扩展时,我使代码变得更加复杂,而一个简单的重构可以让我坚持使用 Haskell 98(现在2010 ) 并有一个更直接的解决方案。

另一方面,有时 GADT 或 Rank2Types(很少是 RankNTypes)可以减少工作量和更简洁的代码。

哪些扩展通常会掩盖更好设计的可能性,哪些通常会改进它?如果有一些两者兼而有之,那么在决定使用该扩展程序之前,用户应该寻找什么(确定他们想要的解决方案是否正确)?

(另请参阅我是否应该使用 GHC Haskell 扩展?

4

1 回答 1

56

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

好的

  • GADT
  • 并行列表推导
  • 图案防护
  • 单子理解
  • 元组部分
  • 记录通配符
  • 空数据声明
  • 存在类型
  • 广义新类型推导
  • MPTC + FD
  • 类型族
  • 显式量化
  • 高阶多态性
  • 词法范围的 tyvar
  • 爆炸模式

坏的

  • SQL 推导式
  • 隐式参数

丑陋的(但必要的)

  • 模板 Haskell
  • 未装箱的类型和元组
  • 不确定的、重叠的和不连贯的实例——通常意味着你有一个错误的设计。

没有把握

  • 箭头符号
  • 查看模式
于 2012-06-01T11:54:03.147 回答