Каскадный оператор связывания (`>> =`) - PullRequest
1 голос
/ 11 марта 2020

У меня есть следующая функция

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'

Есть идеи?

Спасибо!

...