代码之家  ›  专栏  ›  技术社区  ›  sdcvvc

Haskell:函数依赖的不明显例子

  •  6
  • sdcvvc  · 技术社区  · 14 年前

    我看到的函数依赖的例子可以归结为映射 container -> element arguments -> result (如在 Mult Matrix Vector Vector ). 它们似乎可以用类型函数更好地表达。在数据库理论中,更复杂的关系被认为不是这种形式(如 a -> b, b -> a ).

    有没有在Haskell中使用FDs的例子不能很好地使用类型函数编写?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Shimuuar    12 年前

    正如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
    

    这里的关键是重叠。原则上,可以实现类型相等而不重叠,但需要编译器支持。Oleg在这里描述了这种方法: http://okmij.org/ftp/Haskell/typeEQ.html

    顺便说一句 lengthy discussion

        2
  •  4
  •   Heinrich Apfelmus    14 年前

    作为曼努埃尔·查克拉瓦蒂 explains