module Lessons.Lesson07 where
lc :: [(Integer, Char)]
lc :: [(Integer, Char)]
lc = [(Integer
a, Char
b) | Integer
a <- [Integer
1,Integer
2,Integer
3,Integer
4], Char
b <- [Char
'a', Char
'b']]
lc' :: [Integer]
lc' :: [Integer]
lc' = [Integer
a Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
a | Integer
a <- [Integer
1,Integer
2,Integer
3], Integer
b <- [Integer
1,Integer
2]]
lc'' :: [Integer]
lc'' :: [Integer]
lc'' = [Integer
b | Integer
a <- [Integer
1], Integer
b <- [Integer
1,Integer
2,Integer
3,Integer
4], Char
c <- [Char
'a', Char
'z']]
lc''' :: [Integer]
lc''' :: [Integer]
lc''' = [Integer
a | Integer
a <- [Integer
1,Integer
2,Integer
3], Any
b <- []]
lc'''' :: [Integer]
lc'''' :: [Integer]
lc'''' = [Integer
a | Integer
a <- [], Integer
b <- [Integer
1,Integer
2,Integer
3]]
lm :: [(Integer, Char)]
lm :: [(Integer, Char)]
lm = do
Integer
a <- [Integer
1,Integer
2,Integer
3,Integer
4]
Char
b <- [Char
'a', Char
'b']
(Integer, Char) -> [(Integer, Char)]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
a, Char
b)
lm' :: [(Integer, Char)]
lm' :: [(Integer, Char)]
lm' = do
Char
b <- [Char
'a', Char
'b']
Integer
a <- [Integer
1,Integer
2,Integer
3,Integer
4]
(Integer, Char) -> [(Integer, Char)]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
a, Char
b)
mm :: Maybe Integer
mm :: Maybe Integer
mm = do
Integer
a <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
42
Integer
b <- 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 -> Maybe Integer) -> Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ Integer
a Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
b
mm' :: Maybe Integer
mm' :: Maybe Integer
mm' = do
Integer
a <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
42
Integer
b <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
2
Any
c <- Maybe Any
forall a. Maybe a
Nothing
Integer -> Maybe Integer
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer -> Maybe Integer) -> Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ Integer
a Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
b
mm'' :: Maybe Integer
mm'' :: Maybe Integer
mm'' = do
Integer
a <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
42
Integer
b <- Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
2
Integer -> Maybe Integer
forall a. a -> Maybe a
Just (Integer -> Maybe Integer) -> Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ Integer
a Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
b
em :: Either String Char
em :: Either String Char
em = do
Integer
a <- Integer -> Either String Integer
forall a b. b -> Either a b
Right Integer
43
Char
b <- Char -> Either String Char
forall a b. b -> Either a b
Right Char
'a'
Char -> Either String Char
forall a. a -> Either String a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
b
em' :: Either String Char
em' :: Either String Char
em' = do
Any
a <- String -> Either String Any
forall a b. a -> Either a b
Left String
"oh"
Char
b <- Char -> Either String Char
forall a b. b -> Either a b
Right Char
'a'
Char -> Either String Char
forall a. a -> Either String a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
b
em'' :: Either String (Integer, Char)
em'' :: Either String (Integer, Char)
em'' = do
Integer
a <- Integer -> Either String Integer
forall a b. b -> Either a b
Right Integer
43
Char
b <- Char -> Either String Char
forall a b. b -> Either a b
Right Char
'a'
(Integer, Char) -> Either String (Integer, Char)
forall a. a -> Either String a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
a, Char
b)
em''' :: Either Integer Integer
em''' :: Either Integer Integer
em''' = do
Integer
a <- Integer -> Either Integer Integer
forall a b. b -> Either a b
Right Integer
43
Integer
b <- Integer -> Either Integer Integer
forall a b. a -> Either a b
Left Integer
42
Integer -> Either Integer Integer
forall a. a -> Either Integer a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer -> Either Integer Integer)
-> Integer -> Either Integer Integer
forall a b. (a -> b) -> a -> b
$ Integer
a Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
b
lmb :: [(Integer, Char)]
lmb :: [(Integer, Char)]
lmb = [Integer
1,Integer
2,Integer
3,Integer
4] [Integer] -> (Integer -> [(Integer, Char)]) -> [(Integer, Char)]
forall a b. [a] -> (a -> [b]) -> [b]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Integer
a -> [Char
'a', Char
'b'] String -> (Char -> [(Integer, Char)]) -> [(Integer, Char)]
forall a b. [a] -> (a -> [b]) -> [b]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Char
b -> (Integer, Char) -> [(Integer, Char)]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer
a, Char
b)))
mmb :: Maybe Integer
mmb :: Maybe Integer
mmb = Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
42 Maybe Integer -> (Integer -> Maybe Integer) -> Maybe Integer
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Integer
a -> Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
2 Maybe Integer -> (Integer -> Maybe Integer) -> Maybe Integer
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Integer
b -> Integer -> Maybe Integer
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer -> Maybe Integer) -> Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ Integer
a Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
b))
emb :: Either String Char
emb :: Either String Char
emb = Integer -> Either String Integer
forall a b. b -> Either a b
Right Integer
43 Either String Integer
-> (Integer -> Either String Char) -> Either String Char
forall a b.
Either String a -> (a -> Either String b) -> Either String b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Integer
a -> Char -> Either String Char
forall a b. b -> Either a b
Right Char
'a' Either String Char
-> (Char -> Either String Char) -> Either String Char
forall a b.
Either String a -> (a -> Either String b) -> Either String b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Char
b -> Char -> Either String Char
forall a. a -> Either String a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
b))