使う時にはあまり気にならないが、「| m -> s」が関数従属性を定義しているらしい。
class (Monad m) => MonadState s m | m -> s where get :: m s put :: s -> m ()
結局コレは何かというと以下のエントリが参考になる。
この「| a -> v」の部分は「aを引数に取りvを返す関数」ではなく、型同士の依存関係を関数形式で記述したものです。意味としては「aが決まればvの型が一意に定まる」ことを意味しています。型クラスにおける関数従属
具体例は関数従属の背景で丁寧に解説されているが、型推論の際の曖昧性の排除を目的としているという理解でいいのかな。