I have the following code that chains functions using a monad, binding the intermediate results.
r :: Int -> Maybe Int
r n = do
r1 <- f1 n
r2 <- f2 r1
r3 <- f3 r2
r4 <- f4 r3
return r4
where the type signature of the f1-f4 is
f1 :: Int -> Maybe Int.
The code works, however I would like to avoid naming the intermediate results (r1-r4).
If I wasn't working with monads, I could simply write r = f1 . f2 . f3 . f4. Is something similar possible for monads?