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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

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

Avatar for Infiniteloop

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