2011-07-17 16 views
4

可能性の重複:
What's the “|” for in a Haskell class definition?構文型クラスMonadStateの宣言

私はHaskellのにかなり新しいです。

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

ここ| m -> s構文は何ですか?:documentation of MonadStateで、私は以下を参照してください。

+0

確かにそうです。私はそれを探すときにその質問を見つけられませんでした。 "|"を検索するのは難しいですあなたがそれが何と呼ばれているかわからないときに文字: – jchl

+0

まあまあ。ちなみに、これには言語拡張が必要ですが、コンパイラフラグなしでこのような定義をコンパイルしようとすると、GHCは 'C 'クラスのFundeps(fundepsを許可する-XFunctionalDependenciesを使用します)'と言うでしょう。モジュールのドキュメントでは、必要な拡張機能も指定しています。検索方法を理解するために覚えておくべきこと。 :] –

答えて

6

機能依存性または略してfundepと呼ばれています。構文

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

手段、各m又は1つだけのインスタンスが存在すること - mが知られている言い換えれば、コンパイラは、s形成するの種類を推測することができます。 fundepsを使うと、コーディングがずっと楽になります。なぜなら、コンパイラはもっと多くのことを推測できるからです。

+1

迅速かつ簡潔な答えをありがとう。私は "Haskell functional dependency"をgoogledして、http://www.haskell.org/haskellwiki/Functional_dependenciesを読んで忙しくなっています。うまくいけば精巧になります! – jchl