module UseMonads where

import Control.Monad.Identity

example1 :: [Integer]
example1 = do { Integer
x <- [Integer
1,Integer
2]; Integer
y<-[Integer
3,Integer
4]; Integer -> [Integer]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
y)}

example2 :: Maybe Integer
example2 = do { Integer
x <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
1; Integer
y<- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
2; Integer -> Maybe Integer
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
y)}

example3 :: Maybe Integer
example3 = do { Integer
x <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
1; Integer
y<- Maybe Integer
forall a. Maybe a
Nothing; Integer -> Maybe Integer
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
y)}

example4 :: Maybe Integer
example4 = do { Integer
x <- Maybe Integer
forall a. Maybe a
Nothing ; Integer
y<- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
2; Integer -> Maybe Integer
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
xInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
y)}

example5 :: Identity [Char]
example5 = do {Char
x<-Char -> Identity Char
forall a. a -> Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'c':: Identity Char; Char
y<-Char -> Identity Char
forall a. a -> Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'd';[Char] -> Identity [Char]
forall a. a -> Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return [Char
x,Char
y]}

example6 :: Maybe [Char]
example6 = do {Char
x<-Char -> Maybe Char
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'c':: Maybe Char; Char
y<-Char -> Maybe Char
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'd';[Char] -> Maybe [Char]
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return [Char
x,Char
y]}

example7 :: IO [Char]
example7 = do {Char
x<-Char -> IO Char
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'c':: IO Char; Char
y<-Char -> IO Char
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'd';[Char] -> IO [Char]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [Char
x,Char
y]}

example8 :: [[Char]]
example8 = do {Char
x<-Char -> [Char]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'c':: [Char]; Char
y<-Char -> [Char]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'd';[Char] -> [[Char]]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return [Char
x,Char
y]}