Slide 1

Slide 1 text

ॳΊͯͷ ؔ਺ܕϓϩάϥϛϯά @petitviolet Fringe81 Co., Ltd.

Slide 2

Slide 2 text

About Me • খࢵ ߂و(Hiroki Komurasaki) • @petitviolet • ৽ଔ1೥໨(15ଔ) • Fringe81͍ͬͯ͏ΞυςΫͷձࣾ • Android/iOSͷ޿ࠂSDK։ൃ

Slide 3

Slide 3 text

ॳΊͯͷ ؔ਺ܕϓϩάϥϛϯά

Slide 4

Slide 4 text

ॳΊͯͷ ؔ਺ܕϓϩάϥϛϯά

Slide 5

Slide 5 text

ॳΊͯͷ Haskell

Slide 6

Slide 6 text

What is Haskell • ७ਮؔ਺ܕϓϩάϥϛϯάݴޠ • ஗ԆධՁ • ੩తܕ෇͚/ܕਪ࿦ • ΋ͳͲ

Slide 7

Slide 7 text

७ਮؔ਺ܕʁ • ෭࡞༻͕ແ͍ • ࢀরಁաੑ • ಉ͡ೖྗʹରͯ͠͸ৗʹಉ͡ग़ྗ • ؔ਺͸ୈҰڃ • jsͷΑ͏ʹؔ਺ΛΦϒδΣΫτͱͯ͠ѻ͑Δ

Slide 8

Slide 8 text

෭࡞༻͕ͳ͍ • ༩͑ΒΕͨҾ਺ͷΈΛ࢖ͬͯ݁ՌΛฦ͢ • ΦϒδΣΫτͷঢ়ଶͱ͔جຊతʹແ͍

Slide 9

Slide 9 text

ؔ਺ʹ͍ͭͯ

Slide 10

Slide 10 text

໋ྩܗݴޠͷؔ਺͸ ίϯϐϡʔλʹରͯ͠ ԿΛ͢Δͷ͔Λ఻͑Δ

Slide 11

Slide 11 text

ؔ਺ܕϓϩάϥϛϯάݴޠͰ͸ ίϯϐϡʔλʹରͯ͠ ԿͰ͋Δͷ͔Λ఻͑Δ

Slide 12

Slide 12 text

?

Slide 13

Slide 13 text

ؔ਺͸ԿͰ͋Δ͔Λ఻͑Δ • ϑΟϘφον਺ྻ // Python def fib(n): if n < 2: return n return fib(n - 1) + fib(n - 2) [fib(i) for i in range(1, 11)]

Slide 14

Slide 14 text

ؔ਺͸ԿͰ͋Δ͔Λ఻͑Δ • ϑΟϘφον਺ྻ // Haskell fib :: [Int] fib = 1 : 1 : zipWith (+) fib (tail fib) take 10 fib 1, 1, 2, 3, 5, 8, 13, … 1, 1, 2, 3, 5, 8, 13, … 1, 1, 2, 3, 5, 8, 13,21…

Slide 15

Slide 15 text

஗ԆධՁ • ඞཁͳ෼͚ͩΛධՁ͢Δͷ͕஗ԆධՁ • ਺ྻࣗମΛఆٛग़དྷΔ • fibؔ਺͸ແݶ௕ͷϑΟϘφον਺ྻΛฦ͢ // Haskell fib :: [Int] fib = 1 : 1 : zipWith (+) fib (tail fib) fib # ࢮ take 10 fib

Slide 16

Slide 16 text

ؔ਺߹੒ • Unixత • খ͞ͳؔ਺Λ૊Έ߹Θͤͯେ͖ͳ΋ͷΛ࡞Δ Prelude> length "hello" 5 Prelude> show 100 "100" Prelude> (length . show) 100 3

Slide 17

Slide 17 text

ϥϜμࣜ Prelude> let add = \x y -> x + y Prelude> foldr add 0 [1..10] 55

Slide 18

Slide 18 text

\͸ࢥ͍͖ͬΓ໨ΛࡉΊΔͱ ΪϦγϟจࣈͷϥϜμλʹ ݟ͑·͢ΑͶɻ ͍͢͝Haskellֶָ͘͠΅͏ʂ p73

Slide 19

Slide 19 text

ͳΔ΄Ͳ

Slide 20

Slide 20 text

ܕʹ͍ͭͯ

Slide 21

Slide 21 text

੩తܕ෇͚ && ܕਪ࿦ Prelude> let a = 5 + 4 Prelude> :t a a :: Num a => a Prelude> let b :: Num a => a; b = (5 :: Num a => a) + (4 :: Num a => a) Prelude> :t b b :: Num a => a

Slide 22

Slide 22 text

• ܕͷ࣋ͭੑ࣭Λද͢ΠϯλʔϑΣʔεͬΆ͍ • Numʹଐ͢ܕ͸”਺”ͱͯ͠ͷੑ࣭Λ࣋ͭ ܕΫϥε Prelude> :t 10 10 :: Num a => a Prelude> :t 10 :: Int 10 :: Int :: Int Prelude> :t 10 :: Double 10 :: Double :: Double

Slide 23

Slide 23 text

Ϟφυ

Slide 24

Slide 24 text

Ϟφυͷલʹཧղ͍ͨ͠΍ͭ • ϑΝϯΫλʔ • ΞϓϦΧςΟϒϑΝϯΫλʔ class Functor f where fmap :: (a -> b) -> f a -> f b class (Functor f) => Applicative f where pure :: a -> f a (<*>) :: f (a -> b) -> f a -> f b

Slide 25

Slide 25 text

• จ຺Λ࣋ͭܭࢉΛ࣮ݱ͢Δ࢓૊Έ • Maybe͸͋Δ͔΋͠Εͳ͍͠ɺͳ͍͔΋ • List͸ෳ਺ͷ஋͕͋Δ͔΋͠Εͳ͍ Ϟφυ Prelude> Just 10 >>= (\x -> Just(x + 4)) Just 14 Prelude> Nothing >>= (\x -> Just(x + 4)) Nothing

Slide 26

Slide 26 text

• จ຺Λ࣋ͭܭࢉΛ࣮ݱ͢Δ࢓૊Έ • Maybe͸͋Δ͔΋͠Εͳ͍͠ɺͳ͍͔΋ • List͸ෳ਺ͷ஋͕͋Δ͔΋͠Εͳ͍ Ϟφυ Prelude> [1, 2] >>= (\x -> [10, 20] >>= (\y -> [x, y])) [1,10,1,20,2,10,2,20] Prelude> [1, 2] >>= (\x -> [] >>= (\y -> [x, y])) []

Slide 27

Slide 27 text

class Monad m where return :: Monad m => a -> m a (>>=) :: Monad m => m a -> (a -> m b) -> m b … B monad C monad Just 10 >>= (\x -> Just(show x)) = Just “10” B monad SFUVSOB return 10 :: Maybe Int = Just 10 C monad B

Slide 28

Slide 28 text

• จ຺Λ࣋ͭ஋ಉ࢜ͷܭࢉΛ៉ྷʹ΍ΔͨΊͷ࢓૊Έ • Ϟφυ஋ͱɺϞφυ஋ΛฦΓ஋ͱ͢Δؔ਺Λ ͍͍ײ͡ʹ૊Έ߹ΘͤͯϞφυ஋ΛಘΔ • ܭࢉ݁ՌΛϞφυ஋ʹ͢Δ • Just 10 ͱ show Λ࢖ͬͯJust “10” • ࣦഊͯͨ͠ΒશମΛࣦഊͤ͞Δ • Nothing Λ show ͠Α͏ͱ͢Δͱ Nothing Ϟφυ

Slide 29

Slide 29 text

Slide 30

Slide 30 text

We are hiring! fringe81.com/recruit