2. 「Haskell書く?」 「Maybe( ͡° ͜ʖ ͡°)」
● Maybeタイプ
● Just x (Just 1, Just “Haskell”...)
● Nothing (Nothing, Nothing, Nothing....)
● 3 + 2 = 5
● 3 + Just 2 = \(^o^)/オワタ
3. Functorの説明
● class Functor f where
fmap :: (a -> b) -> f a -> f b
● instance Functor Maybe where
fmap f (Just x) = Just (f x)
fmap f Nothing = Nothing
● Just (3+2)
● fmap (+3) (Just 2)
4. Applicativeの説明
● class (Functor f) => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
(*>) :: f a -> f b -> f b
● instance Applicative Maybe where
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> something = fmap f something
● Just (+3) <*> Just 2
5. Monadの説明
● class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
● instance Monad Maybe where
return x = Just x
(>>=) Nothing f = Nothing
(>>=) (Just x) f = f x
● Just 1000 >>= half >>= half >>= half >>= half....
half x = if even x
then Just (x `div` 2)
else Nothing
6. あれ?
class (Functor f) => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
(*>) :: f a -> f b -> f b
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
※画像引用元
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
8. Haskell 2014版
class Applicative m => Monad m where
-- Minimal complete definition: (>>=) or join
(>>=) :: m a -> (a -> m b) -> m b
m >>= f = join (fmap f m)
(>>) :: m a -> m b -> m b
(>>) = (*>)
join :: m (m a) -> m a
join m = m >>= id
return :: a -> m a
return = pure
fail :: String -> m a
fail s = error s