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

Fun of Types

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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"