我有几次让 GHC 告诉我使用扩展的经验,只是发现在使用该扩展时,我使代码变得更加复杂,而一个简单的重构可以让我坚持使用 Haskell 98(现在2010 ) 并有一个更直接的解决方案。
另一方面,有时 GADT 或 Rank2Types(很少是 RankNTypes)可以减少工作量和更简洁的代码。
哪些扩展通常会掩盖更好设计的可能性,哪些通常会改进它?如果有一些两者兼而有之,那么在决定使用该扩展程序之前,用户应该寻找什么(确定他们想要的解决方案是否正确)?
(另请参阅我是否应该使用 GHC Haskell 扩展?)