Maestumプログラミング、囲碁、読書の話題この広告は、90日以上更新していないブログに表示しています。FunctorとApplicativeをリストで探るHaskell「モナドとはなにか」「Applicativeとはなにか」といった抽象的な共通性の探索からはじめると挫折するのが目に見えているので、いったんそういったことは置いておいて、まずはいくつかの具体的なモナドと戯れて個別に挙動を理解していきたい。いった具体的な理解からだんだん抽象化が自然と見えてくればしめたものである。いうことで、今回は一番お世話になっている「リストモナド」をFunctor、ApplicativeそしてMonadとして使ってみて理解してみたい。mapでFunctorの法則を満たしている。[1,2,3]実はfmapは(<$>)という同義の二項演算子が存在する。[2,3,4,5,6]のように使える。ApplicativeとしてのリストApplicativeというのはFunctorとMonadの中間にある概念で、Haskellに明確に組み込まれるのは他の二つより遅かったらしい。Effectsという論文でApplicativeの概念としての有用性が懇切に説かれている。今回はひたすらリストをApplicativeとしていじるだけにとどめておく。(実際には他にも<*と*>があるが・・・)purepureは簡単で、ある値をApplicativeのコンテキストに入れる。<*><*>は同一のコンテキストに入っている関数と引数をつないで、結果を同じコンテキストに入れて返す。リストに入った関数をリストに入った引数に適用して、リストに入った結果を返す。[2,3,4]となる。[2,3,4]と非常に似ている。[2,3,4]とするとさらに似ているかもしれない。ApplicativeがFunctorより強力な理由として、引数が2以上の関数でも簡単に使えるという点がある。23]と、引数リストの直積に関数が適用される。11]と、引数が増えても対応できる。(3+)]のようにcurryingが起きている。[1..3]のほうが短いので、実際には後者を使う方が楽。個人的には複数リストに対する関数適用だと、直積よりもzipWithの拡張版のような挙動が欲しい気がしている。そっちについてもいろいろ調べていて、その話題についてはまた別の記事で書きたい。次回の記事ではリストをMonadとしていろいろいじってみる。Combinatorを実装していく。)はてなブログをはじめよう!zehnpaardさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。