私はハスケルに新しいので、これはノブの質問かもしれません。GHCiは多態性アクションに使用するMonad型クラスのインスタンスをどのように選択しますか?
私が行ったときreturn 10 >>= return
GHCiは10
を示しています。 return 10
のタイプを:t
にチェックすると、それはちょうどreturn 10 :: (Monad m, Num a) => m a
と表示され、私はtypeOf return 10
とエラーが発生します。
私が理解する限り、>>=
の特定のインスタンスを使用してreturn 10 >>= return
を評価する必要があります。そのため、どのインスタンスを使用し、どちらを使用するかはどのように決定しましたか?
私はこれを一時的に「[単一形体の制限とは何ですか?](http://stackoverflow.com/questions/32496864/what-is-the-monomorphism-restriction)」の複製としてクローズしました。この質問は、 'a'に対して' Num'インスタンスがどのように選ばれるかを扱っていますが、 'm'のために' Monad'インスタンスがどのように選択されているのかについては言及していません。だから私はそれがかなり重複していないと思うし、慎重な答えが必要です。 –
実際には、モナドの特定のインスタンスが汎用モナドに対してどのように選択されているかを尋ねています。私はリストの '' = = 'を使って推測していますが、なぜそれがわかりません。 – Juan
IOモナドかもしれないと思う。通常、ghciはREPLの結果を 'print'しようとしますが、IOアクションが発生した場合は代わりに_executes_し、アクションによって返された結果を出力します。 '(Monad m、Num a)=> m a'のような型は' IO a'と互換性があり、それは現在のREPL式を実行するかどうかを決めるのに使う基準です。 – ErikR