added lecture3
This commit is contained in:
parent
bcff353228
commit
f9ba19255e
24
exampleCode/lecture3/MaybeIO.hs
Normal file
24
exampleCode/lecture3/MaybeIO.hs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
module MaybeIO where
|
||||||
|
|
||||||
|
import Control.Applicative
|
||||||
|
|
||||||
|
data MaybeIO a = MaybeIO { runMaybeIO :: IO (Maybe a) }
|
||||||
|
|
||||||
|
instance Functor MaybeIO where
|
||||||
|
fmap f = MaybeIO . fmap (fmap f) . runMaybeIO
|
||||||
|
|
||||||
|
instance Applicative MaybeIO where
|
||||||
|
pure = MaybeIO . pure . pure
|
||||||
|
f <*> x = MaybeIO $ (<*>) <$> f' <*> x'
|
||||||
|
where
|
||||||
|
f' = runMaybeIO f
|
||||||
|
x' = runMaybeIO x
|
||||||
|
|
||||||
|
instance Monad MaybeIO where
|
||||||
|
return = pure
|
||||||
|
x >>= f = MaybeIO $ x' >>= runMaybeIO . mb . fmap f
|
||||||
|
where
|
||||||
|
x' = runMaybeIO x
|
||||||
|
mb :: Maybe (MaybeIO a) -> MaybeIO a
|
||||||
|
mb (Just a) = a
|
||||||
|
mb Nothing = MaybeIO $ return Nothing
|
BIN
lecture3.pdf
Normal file
BIN
lecture3.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user