v2: Val monad is now necessary: main::Int -> Val Weather main i = do -- do: Val as monad v1 <- return $ Val' i -- pure: applicative v2 <- return $ over20 <$> v1 -- <$> : functor v3 <- Val' weather <*> v2 -- <*> : applicative return v3