読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

fpinscala (12.9, 12.11)

ふんふん簡単簡単と思ってただ読んでたら突然分からなくなったので, 問題を一応解いておく. fpinscalaは, 問題を全部解いていくこと!と書いてあるんだけど, だるいので, 問題は頭でなんとなく考えるくらいでさらっとスルーしている.

12.9は, 「F,Gがアプリカティブファンクタだとしたら, F.Gをアプリカティブファンクタとする合成を実装せよ」であり, 12.11は「F,Gがモナドであっても, F.Gをモナドにする合成関数は一般には書けないことを示せ」である.

すげーざっくりで済まないですが, こういうことですか?ということを整理しておく. めんどくさいので実装はしない. この前のLens勉強会において, 関数型の型いじりは, 型間の矢印を適当につなぎ合わせることだと理解したので, そういうことしか考えていない.

12.9

F (G A) -> F (G B) -> (A -> B -> C) -> F (G C)が実装できることを示せばいい. FはアプリカティブなのでF A -> F B -> (A -> B -> C) -> F Cは与えられている. これより, F (G A) -> F (G B) -> (G A -> G B -> G C) -> F (G C)を導ける(Gはアプリカティブなので). 示すものを実装するためには, (A -> B -> C) -> (G A -> G B -> G C)が実装出来ればいいが, Gはアプリカティブなので与えられている. この方針で実装出来る.

12.11

F (G A) -> (A -> F (G B)) -> F (G B)を実装出来ればよい. Fはモナドなので, F A -> (A -> F B) -> F B. これより同様に, F (G A) -> (G A -> F (G B)) -> F (G B). A -> F (G B)からG A -> F (G B)に辿り着ければいいがどう考えても無理なので無理.