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

Fun of Types

Fun of Types

Avatar for Ryosuke TAKASHIMA

Ryosuke TAKASHIMA

February 22, 2019
Tweet

More Decks by Ryosuke TAKASHIMA

Other Decks in Programming

Transcript

  1. ܕͷ֊૚ʢ)BTLFMMʣ Functor Applicative
 Functor Monad [] Maybe IO r ->

    fmap (<$>) (>>=) Ϧετ ೖग़ྗ ؔ਺ ͍ΘΏΔ0QUJPOBM
  2. 'VODUPS GNBQ ͷྫ fmap (show . (* 3)) [1..4] --

    3ഒͯ͠จࣈྻʹม׵
 => ["3", "6", "9", "12"] fmap fromEnum (Just 'F') -- ίʔυϙΠϯτΛऔಘ
 => Just 70 fmap fromEnum Nothing -- த਎͕ͳ͚Ε͹Կ΋͠ͳ͍
 => Nothing
  3. 'VODUPS GNBQ ͷղऍ w 'VODUPSΛശͱଊ͑Δͱɺ
 GNBQ͸ശͷܗΛม͑ͣʹத਎Λม͑Δૢ࡞ fmap :: Functor f

    => (a -> b) -> f a -> f b
 fmap :: (a -> b) -> [a] -> [b]
 fmap :: (a -> b) -> Maybe a -> Maybe b
  4. 'VODUPSͱͯ͠ͷؔ਺ w ؔ਺SB΋'VODUPSʢSΛ౉͢ͱBΛฦͯ͘͠ΕΔശʁʣ
 Ͱ͸GNBQ͸Կʁ fmap :: Functor f => (a

    -> b) -> f a -> f b
 fmap :: (a -> b) -> (r -> a) -> (r -> b) fmap = (.) fmap (fmap show (* 3)) [1..4] w SBͱBCΛͭͳ͛Δؔ਺߹੒ʂ w ͔ͩΒ͜͏΋ॻ͚Δ
  5. .POBEͱ  w ҎԼͷͭͷίʔυ͸౳Ձ w Ұͭ໨ͷ݁Ռ͸ແࢹͯ͠ɺೋͭ໨Λऔಘ print [1..4] >> print

    "hoge" do
 print [1..4]
 print "hoge" (>>) :: Monad m => m a -> m b -> m b
 (>>) :: IO a -> IO b -> IO b
  6. .POBEͱͯ͠ͷϦετ w ҎԼ͸Ͳ͏ͳΔʁ w  ͸  ͭ·ΓqBU.BQͷಛघܗͳͷͰʜ
 ͪͳΈʹҎԼͷΑ͏ʹ΋ॻ͚Δ (>>)

    :: Monad m => m a -> m b -> m b
 (>>) :: [a] -> [b] -> [b] [1..4] >> "hoge" do
 [1..4]
 "hoge"