У меня есть следующая функция
bar :: (Monad m, Num b) => m b -> m b -> m b -> m b
bar x y z = do
x' <- x
y' <- y
z' <- z
return $ x' + y' + z'
, и я пытаюсь написать ее без блока 'do
'. Я пытался
bar' :: (Monad m, Num b) => m b -> m b -> m b -> m b
bar' x y z = x >>= ( \x' -> y >>= (\y' -> z >>= (\z' -> (x' + y' + z') ) ))
Но я не могу заставить его работать - я получаю
error:
* Occurs check: cannot construct the infinite type: b ~ m b
* In the expression: x' + y' + z'
Есть идеи?
Спасибо!