Этот вопрос из статьи "Тривиальная Монада" найден в http://blog.sigfpe.com/2007/04/trivial-monad.html. Условии ответКак вы определяете функцию сигнатуры h :: M Int -> M Int -> M Int, так что h (M x) (M y) = M (x + y) без разворачивания монады?
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
Теперь я немного смущен, как вы можете положить x в g, если в качестве первого параметра требуется Int
, но x is W Int
?
+1 для трицератопса – chibro2