セカイノカタチ

世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。最近はカメラの話題も多め

「第2期 第17回 H本読書会 in 秋葉原」を終えて #readhbon #haskell

第2期第17回H本読書会を開催しました。

前回、前々回に引き続き、第11章「ファンクターからアプリカティブファンクターへ」を途中まで読みました。

なかなか遅々として進まない感じですが、丁寧にやっていると言っても過言ではない!(?)

H本読書会とは?

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

こちらの本を輪読する読書会です。

Haskellを覚えると色々楽しいことがあるんじゃないかと始めた読書会で、Haskellに関する本を少しずつ読んでいくという工夫のないスタイルが売りです。(汗

第11章「ファンクターからアプリカティブファンクターへ」つづき

アプリカティブファンクターとしての「リスト」。

リストがアプリカティブファンクターとして振る舞う場合、総当りの組み合わせに対して、対象の関数を実行するというところについて勉強しました。

アプリカティブファンクターとしての「IO」。

IOをアプリカティブファンクターとして扱うと、IOアクションで得られた値に対して関数が適用されます。

「関数」もアプリカティブファンクター。

難しいですね。パズルのように組み合わさってアプリカティブファンクターとして動作します。

例えば、下記のように関数をpureで包むというのは判るのですが、

pure (+)

単に数字(値)を包むと、関数のアプリカティブファンクターとして解釈されるようです。

pure 3

不思議ですね。(^^;

ZipList

先ほど、Listは総当りのアプリカティブファンクターと言いましたが、zipによる綴じ合わせを行うアプリカティブファンクターという解釈もあります。

zipWithを使って要素を綴じ合わせていきます。

アプリカティブ則

今回の勉強の最後に、アプリカティブが満たすべき法則を見ました。

pure id <*> v = v
pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
pure f <*> pure x = pure (f x)
u <*> pure y = pure ($ y) <*> u

ファンクター則と比べると格段に難しいですね。(^^;;

実際にMaybeなどで実行してみて、満たされていることを確認しまいしたが、直感的に納得感のない法則もありました。(汗

次回、第18回 「第11章 ファンクターからアプリカティブファンクターへ」続き

次回。ファンクターとアプリカティブファンクターの続きです。

次回は、8/5に開催です。

これから始めたいと言う人も、是非ご参加ください。

第18回。よろしくお願いします。(__)

readhbon.doorkeeper.jp