存在は知っていて、いつか読まなきゃと思ってたんだけど、ようやく時間を取れました。

ちなみに、正式なタイトルはFunctional Programming in Swiftでなく、Functional Swiftのようです。
今回読んだのは2015-12-14版です。

http://egg-is-world.com/2015/09/09/sugoi-haskell-book/を見て、先にすごいHaskellたのしく学ぼう!を読んだんですが大正解でした。
関数型の用語とか知らない状態だと、特に後半がきつかったと思われます。
全体的にHaskellを参考にされてる部分も多く、この話すごいHaskell本で見たことあるぞ?という感じで理解の助けになりました。

以下この本を読んだ記録です。

1回目

この本は1回で理解できない覚悟をしていたので、まずはキーボードを触らずに読みました。 途中までは調子良かったですが、12章辺りからこれ手を動かさないと無理だな、となりました。 一応全体の流れをつかむために最後まで流しました。

我ながらひどいですが、こんなメモが残っておりました。
(読みながらiPhoneで書いたもの。ページはPDF版のものです。)

ページ メモ
p. 30 CIImageのFilterの例はimage引数がcurry化されてる。初めてcurry化がしっくりきたかも。
p. 41 reduceはfoldlと同じ。
p. 45 ->A->B->Cはどういう意味?
p. 51 precedence触ってみる。自分で演算子定義すること少ないから忘れがち。
p. 55 なぜmapと呼ぶかはお楽しみ。
p. 67 こういう時はforでいいんだよという例。
p. 71 guardにbool直接渡すの使っていこう。
p. 72 Arrayを直接Arbitraryに適合させられないので、ArbitraryInstanceが必要。
p. 84 mutable使っても問題ないケースもあるよねという例。関数外に影響がない。
p. 88 バッククォートは何?
p. 91 Eitherのわかりやすい例。
p. 99 indirectとは?
p. 100 let .っていう書き方使ったことなかった。
p. 101 if caseも使ったことなかった。
p. 107 decomposeいい感じ。他のコードでも使えそう。
p. 112 GitHubのサンプル動かす。10章を参考に何か作りたい。
p. 133 mutatingが必要。
p. 134 AnyGenerator触ってみる。
p. 137 noescape忘れがち。
p. 139 oneとArray、+の使い方。
p. 156 pure。この章からはコードが多くて手を動かさないとついていけなさそう。
p. 187 なぜmapっていう同じ名前持ってる?ArrayもOptinalもType constructors。(Haskellの型コンストラクタ)
p. 188 Functorはよくcontainerと言われるけどRegionみたいなのもFunctor。
p. 191 addOptinalsの例いい。[…]ってなんだ?ただの省略か。
p. 192 Monadsの説明良い。
p. 194 list comprehensions?内包表記のことだった。
p. 197 よいまとめ。
p. 198 Haskellやりましょうという話。

2回目

2回目は理解を深めるため、1回目に気になった部分をPlaygroundで試しながら読みました。 (ところどころすごいHaskell本も参照しながら…)

結果はこちらです。

https://github.com/tnantoka/swift-a-week/blob/gh-pages/works/FunctionalSwift.playground/Contents.swift

StringFilterは、第3章を参考にStringの変換を関数型っぽくしてみたものです。   変換対象であるstringがcurry化されていると考えると、しっくりきました。

GeneratorOfOneは、Optionalとそうじゃない型を簡単にGeneratorにできることはわかったけど、 まだ自分のコード内で使えるレベルにはなってないです。

まだ理解しきったとは言えないので3回目も読もうと思います。(特に12章以降)
投稿が遅れた上に、今週はアウトプットの少ない週でした。

宿題

  1. 10章を参考に何かを作る
  2. 12章のParserを写経
  3. Functor、Applicative、Monadなどの理解を深める