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]}