4
私はGHCiの内部のような関数を定義します。ghciのliftM:なぜそのような違いがありますか?
> :m Control.Monad
> let f n = n+1
> let g = liftM f
彼らはうまく機能:
> g $ Just 2
> Just 3
> g $ [1,2]
> [2,3]
しかし、私は、ファイル内の同じ機能(probl.hs)を定義:
import Control.Monad
f :: Integer -> Integer
f n = n + 2
g = liftM f
をghci経由でこのファイルを実行してください。
ghci probl.hs
私は、このようなメッセージが表示されました:
probl.hs:6:5: error:
* Ambiguous type variable `m0' arising from a use of `liftM'
prevents the constraint `(Monad m0)' from being solved.
Relevant bindings include
g :: m0 Integer -> m0 Integer (bound at probl.hs:6:1)
...
Failed, modules loaded: none.
なぜ、このような違いがあるのでしょうか?そして、どのようにして第2の状況の問題を解決するか(私は最初のような同じ振る舞いを望みます)?
私が今見ることができ、その答えは、単相性限定の話題に属しているが、疑問の点は、その中のGHCiの行動やliftMについてでした。私は少し違うと思う。 – Vladimir