具有功能依赖性的动机

Sib*_*ibi 9 haskell functional-dependencies

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

功能依赖的一个例子:

class (Monad m) => MonadSupply s m | m -> s where
  next :: m (Maybe s)
Run Code Online (Sandbox Code Playgroud)

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

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

class (Monad m) => MonadSupply s m where
      next :: m (Maybe s)
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*zer 8

编写不使用函数依赖的代码是完全正确的,因为推理很糟糕,所以使用它只是一种痛苦.

基本上没有文件描述符,该函数get :: MonadState m s => m s将不得不找出ms独立.通常m很容易推断,但通常s需要明确的注释.

而且,这比我们需要的要广泛得多,所以我们可以限制我们的类型检查器说"For m,恰好有1 s",这种方式,一旦m被推断,s对于类型推理算法是显而易见的