我已经有过几次GHC告诉我使用扩展的经验,但却发现当使用该扩展时,我使代码变得更复杂,因为简单的重构会让我坚持使用Haskell 98(现在2010)并有一个更直接的解决方案。
另一方面,有时GADT或Rank2Types(很少是RankNTypes)的工作量少得多,代码也更清晰。
哪些扩展通常会掩盖更好设计的可能性,并且通常会改善它?如果有一些同时执行这两项工作,那么在决定使用该扩展之前,用户应该寻找什么(确定它们是否适用于他们想要的解决方案?)
答案 0 :(得分:53)
道德“好”扩展和道德“坏”扩展的临时列表 - 这是一种美学判断!
好
错误
丑陋(但必要)
不确定