Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アプリカティブファンクターとHaskell 2014版

アプリカティブファンクターとHaskell 2014版

2014年6月20日に開催された勉強会 OpenIL Vol2内で使用されたスライド資料。

Infiniteloop

July 14, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. 「Haskell書く?」 「Maybe( ͡° ͜ʖ ͡°)」 • Maybeタイプ • Just x

    (Just 1, Just “Haskell”...) • Nothing (Nothing, Nothing, Nothing....) • 3 + 2 = 5 • 3 + Just 2 = \(^o^)/オワタ
  2. 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)
  3. 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
  4. 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
  5. あれ? 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
  6. 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