【发布时间】:2012-06-01 06:02:27
【问题描述】:
我有过几次让 GHC 告诉我使用扩展的经验,只是发现在使用该扩展时,我使代码变得更加复杂,而一个简单的重构就可以让我坚持使用 Haskell 98(现为2010)并有更直接的解决方案。
另一方面,有时 GADT 或 Rank2Types(很少是 RankNTypes)可以减少工作量和更简洁的代码。
哪些扩展通常会掩盖更好设计的可能性,哪些通常会改进它?如果有一些两者兼而有之,那么用户在决定使用该扩展程序之前应该寻找什么(确定他们想要的解决方案是否正确)?
【问题讨论】:
-
相似,但不同。虽然这个问题是关于扩展的“安全性”,但 John 的问题是关于设计带有和不带有扩展的代码的收益。
-
这是一个非常困难的问题:一些扩展非常通用,使新类型的编程成为可能,一些具有高度针对性,旨在解决特定的、不可能完成的任务。
-
唐斯图尔特:是的,我同意。回想起来,我希望我已经关注了这个问题以及影响类型检查器的那些扩展。非常感谢您的回答。
-
Stephen Diehl 列出了扩展名,说明它们是否是良性的:dev.stephendiehl.com/hask/#language-extensions
标签: haskell language-extension