MonadState类型类声明的语法

时间:2011-07-17 16:21:51

标签: haskell typeclass

  

可能重复:
  What's the “|” for in a Haskell class definition?

我对Haskell很新。在documentation of MonadState中,我看到以下内容:

class Monad m => MonadState s m | m -> s where
    get :: m s
    put :: s -> m ()

这里的| m -> s语法是什么?

1 个答案:

答案 0 :(得分:6)

它简称为功能依赖或fundep。语法

class Monad m => MonadState s m | m -> s where

表示每个m只有一个实例,或者 - 换句话说,如果已知m,编译器可以推断出s形式的类型。使用fundeps使编码更容易,因为编译器可以推断更多。