具有功能依赖性的动机

时间:2013-12-11 18:12:53

标签: haskell functional-dependencies

在Haskell中具有功能依赖性的动机是什么?

功能依赖的一个例子:

class (Monad m) => MonadSupply s m | m -> s where
  next :: m (Maybe s)

RWH一书中指出,功能依赖有助于类型检查。它实际上有何帮助?

此外,这段代码实际编译:

class (Monad m) => MonadSupply s m where
      next :: m (Maybe s)

但我想,它会产生运行时错误。

1 个答案:

答案 0 :(得分:8)

编写不使用函数依赖的代码是完全没问题的,因为推理很糟糕,所以使用起来很麻烦。

基本上没有FD,函数get :: MonadState m s => m s必须独立地找出ms。通常m非常容易推断,但s通常需要明确的注释。

此外,这比我们需要的要广泛得多,所以我们可以限制我们的类型检查器说“For m,恰好有1 s”,这样一次{{1}推断,m对于类型推断算法是显而易见的