【发布时间】:2015-12-20 16:04:18
【问题描述】:
我知道有两种方法可以在 Haskell 中将接口规范与该接口的实现分开:
-
类型类,例如:
- 接口:
RandomGen - 实现:
StdGen
- 接口:
-
记录,例如:
问题 1:什么时候适合使用其中一种?
问题 2:在 Haskell 中还有哪些其他方法可以分离接口/实现?
【问题讨论】:
-
当你期望每种类型都有一个唯一的实现,或者你想通过它们的类型来标记实现,或者你只是需要隐式实例解析的便利,使用类型类。否则,使用记录。但这只是我的观点……我认为至少第 1 部分是非常基于观点的(有些人在几乎所有情况下都是顽固地主张一个胜过另一个……)。
-
您可能会发现这很有用:stackoverflow.com/questions/17100036/…
-
类型类不用于与规范分离的接口。它们用于引入上下文相关的重载符号。类型类作为模块的一个问题是所有实例在类型类可见的范围内都是可见的。
-
@user2407038 您的建议遵循 Gabriel 在下一条评论提供的链接中所说的内容。谢谢。
-
@Sibi - 感谢您的链接。加布里埃尔总是有很好的建议。
标签: haskell interface polymorphism typeclass