3

この質問は、http://blog.sigfpe.com/2007/04/trivial-monad.htmlにある記事「Trivial Monad」からのものです。提示された答えは

h x y = x >>= (\x -> g x y)

または同等に(記事の文脈で)

h :: W Int -> W Int -> W Int 
h x y = bind ( \x-> g x y ) x

gはどこですか

g :: Int -> W Int -> W Int
g x y = y >>= (return . (+x))

モナドの場合:

data W a = W a deriving Show

今、私は少し混乱しています。Int最初のパラメーターとして x を使用する場合、g に x をどのように入れることができますW Intか?

4

2 に答える 2

7

Missingno は重要なステップを指摘しましたが、タイトルの質問に対する答えは次のとおりliftM2 (+)です。

于 2013-02-23T01:47:42.107 に答える
7

今、私は少し混乱しています。最初のパラメーターとして Int を取り、x が M Int の場合、どうすれば g に x を入れることができますか?

2 つの異なるx変数があり、内側の変数はラムダ式内の外側の変数を隠しています。コードを書くためのより明確な方法は、次のようなものになります

h mx my = mx >>= (\x -> g x my)
于 2013-02-23T00:31:34.277 に答える