此問題來自文章「Trivial Monad」,發現於http://blog.sigfpe.com/2007/04/trivial-monad.html。所提供的答案是你如何定義一個簽名h :: M Int - > M Int - > M Int的函數,使得h(M x)(M y)= M(x + y)而不展開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是W Int
,那麼如何將x放入g?
+1三角龍 – chibro2 2013-02-23 00:37:47