sdc*_*vvc 6 haskell functional-dependencies
我见过的函数依赖的例子归结为映射container -> element和arguments -> result(如Mult Matrix Vector Vector).它们似乎用类型函数表达得更好.在数据库理论中,更复杂的关系被认为不是这种形式(如a -> b, b -> a).
是否存在使用类型函数无法很好地编写Haskell中FD的使用示例?
小智 3
正如 Heinrich Apfelmus 已经说过的那样,MPTC+FunDeps 和单独的 TF 是等效的。当它们与其他扩展结合使用时,特别是与重叠实例结合时,就会出现差异。当允许重叠时 TF 不健全,而 FunDeps 允许重叠。例如,使用 FunDeps 可以轻松实现类型相等:
data HTrue
data HFalse
class TypeEq a b eq | a b -> eq
instance TypeEq a a HTrue
instance eq ~ HFalse => TypeEq a b eq
Run Code Online (Sandbox Code Playgroud)
这里的关键点是重叠。原则上,可以在不重叠的情况下实现类型相等,但需要编译器支持。Oleg 在此处描述了该方法:http://okmij.org/ftp/Haskell/typeEQ.html
PS在 haskell-prime 邮件列表上对此主题进行了长时间的讨论。