A

p

e

r

s

o

n

a

l

B

l

o

g

Just "Hello!"

return "Hello!" :: Maybe [Char]
(++ "!") `fmap` Just "Hello"
Just "Hello" >>= return . (++ "!")
Just (Just "Hello") >>= (fmap . fmap) (++ "!") . return
[ Just "Hello" ] >>= return . fmap (++ "!")
[ Just "Hello" ] >>= \(Just x) -> return (x ++ "!")
Just "Hello" : [] >>= \x -> return (x >>= return . (++ "!"))
maybe [] (\x -> x ++ "!") $ Just "Hello"
(\(Just x:Just y:_) -> x ++ y) [Just "Hello", Just "!"]
[Just "Hello", Just "!"] >>= foldl1 (++) . \(Just x) -> return x
fmap Just ["Hello"] >>= return . (++ "!") . \(Just x) -> x
(++ "!") $ (>>=) (fmap Just "Hello") (\(Just x) -> return x)