すごいHな本を読み始めた

この記事は PMOB Advent Calendar 2015 - Adventar の 12 日目の記事です.

前: scalaはじめてみた - ざっきーの雑記ー

次:zodi_G12 - 最近ぷよぐやみんぐしたぽよ

「すごいHaskell楽しく学ぼう!」って本です.

きっかけ

  • Javaでモナモナの解説をちらっと書いてくれているBlogをQiitaで発見したから.(結構でかい)
  • 関数型ゲンゴの知識を深めたい.(そんなにでかくない)
  • 暇だった.(これが一番でかい)
    • そこにエロ本があったから.
  • lazy Kでmatsubともりあがったから.(PMOB要素)
    • SKIすごい.

進捗

  • 6章の終盤までよんだ.飛ばして7章読もうかなって感じ.
  • モナドのところを最初読んだけどふぁんくたーがどーたらこーたらって書いてあって, 「なにそれ...」ってなったので,素直に最初から読む流れ.

得られたこと

  • Haskellの雰囲気.(主に文法)
  • ふぁんくしょなるなふんいき.
    • 副作用すきくない.
    • じつはだいたい関数.
    • 型すごい.

おもしろいなって思った部分

パターンパッチ

以下のコードは全て同じ挙動をする関数だよ.

func :: Int -> Int
func (-1) = error "マイナスイチ!!"
func 1 = 1
func 0 = 1
func n = n * func (n - 1)
func :: Int -> Int
func n = case n of (-1) -> error "マイナスイチ!!"
                    1 -> 1
                    0 -> 1
                    n -> n * func (n - 1)
func :: Int -> Int
func n
  | n == (-1) = error errorStringNegativeOne
  | n == 1 = 1
  | n == 0 = 1
  | otherwise =  n * func (n - 1)
  where errorStringNegativeOne = "マイナスイチ!!"

みたいな.

Listの操作

map (\x -> x + 1) [2, 1, 4, 3, 5]
-- [3,2,5,4,6]

は,

map (+1) [2, 1, 4, 3, 5]
-- [3,2,5,4,6]

と同じ.

毎回無名関数を考えてダダダっと書かなくても, +も関数なんだから+11を部分適用させたヤーツで事足りるでしょ,ってこと.

あと,リスト内包表記のほうはmapfilterでゴリゴリやらなくていいから, 覚えれば楽そうだな〜って思ったけど,自分が慣れてるのはmapとかの関数を使う方だから,悩ましいなぁっておもった.

加えて,foldの凄みを知れた.

何となく説明は聞いたけどイマイチ挙動を知らなかったマンだったので, なぜfoldleftfoldrightの2つがあったほうがいいのか, というのが何となくだけど分かったのでよかった.

IO

副作用を副作用でまとめちゃうってことかぁってなった.

まとめ

楽しく学んでいこうと思う. できればモノイドとかモナドを何となくでも理解したいなぁってところ.

目標は次の番までに読み切るってやつで.

余談

ファンクショナルScalaの本を途中で止めていたけど, すごいH本を見てて読みたい欲湧いてきたので, 挫折したら読むと良いのかなぁって思ったりした.

www.amazon.co.jp

www.amazon.co.jp