MonadState类型类声明的语法

jch*_*chl 4 haskell typeclass

可能重复:
Haskell类定义中的"|"是什么?

我对Haskell很新.在MonadState文档中,我看到以下内容:

class Monad m => MonadState s m | m -> s where
    get :: m s
    put :: s -> m ()
Run Code Online (Sandbox Code Playgroud)

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

fuz*_*fuz 6

它简称为函数依赖或fundep.语法

class Monad m => MonadState s m | m -> s where
Run Code Online (Sandbox Code Playgroud)

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