タグ

モナドに関するkrrrrのブックマーク (4)

  • FreeモナドとTagless FinalによるDependency InjectionのためのDSL - Qiita

    前回の記事では、ReaderモナドやFreeモナドを使ってDependency Injectionを行うための小さなDSLを組み立てた。今回の記事では、まず前回組み立てたDSLの課題であるExpression Problemと、それを解決するための機能Injectと、さらにはTagless Finalを用いたDSLについて述べる。 この記事は前回の記事の知識を前提としているので、分からない言葉などがある場合はまず前回の記事を参照して欲しい。また、文章について不明なことや意図が分かりにくい部分があれば気軽に指摘して欲しい。 注意: 記事の中にあるコードは読みやすさのためにimportなどを省略しているので、このままでは動かない。動かしたい方はGithubのリポジトリを使うとよい。 Expression Problem Expression Problemとは、こちらのサイトを引用すると次のよ

    FreeモナドとTagless FinalによるDependency InjectionのためのDSL - Qiita
  • YonedaとCoYoneda、そしてFunctor - capriccioso String Creating(Object something){ return My.Expression(something); }

    当は、 Freeモナドを超えた!?operationalモナドを使ってみよう http://fumieval.hatenablog.com/entry/2013/05/09/223604 に影響されて、Operationalモナドの話をまとめようと思ったのですが、ちょっと時間なさそうだったので、今日はちょっとCoYonedaの話をしましょう。 上記ブログでは、CoYonedaについて「ただのデータ型からFunctorを生み出せる」と紹介されています、これがいったいどういう事か、ちょっと深く追ってみましょう。 初めに 今回は、任意の型をFunctorにする事が目標なので、まず簡単に以下のような型を定義しておきます。 data Hoge a = Foo a | Bar a deriving Show 米田先生とYoneda Yonedaというのは米田信夫という日数学者の名に因んだ「米田の

    YonedaとCoYoneda、そしてFunctor - capriccioso String Creating(Object something){ return My.Expression(something); }
  • 単なる自己関手の圏における... (1) 圏とは | tnomuraのブログ

    Haskell のIOモナドの分かりにくさに対する批判に対し、フィリップ・ワドラーが、「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」と答えたそうだ。これで、すんなり納得するのはよほど圏論に詳しい人だろう。 管理人としては、圏論抜きで Haskell というプログラム言語を使えればそれが一番ありがたいのだ。しかし、最低でもモナドや圏論やモノイド対象が何を指しているのかくらいは知っておきたい。そこで、『モナドへの近道・Haskell からの寄り道』(中村翔吾著)というレポートを道案内にして、少なくともモナドというのが何を指しているのかを探索してみた。 まず、圏論の「圏」という言葉が何を指しているかだ。端的に言うと圏とは、対象と射からなる構造だ。集合と写像なら少しは馴染みがあるので、集合に例えると、対象とは集合のことで、射とは写像のことだ。集合 a と集合 b があり、そ

    単なる自己関手の圏における... (1) 圏とは | tnomuraのブログ
  • モナドって結局何なのよ? — join to Monad v0.1.3 documentation

    モナドって結局何なのよ?¶ Haskell を勉強しようとすると必ず「モナド」ってのが出てきます。困ったものです。数学とか圏論とか関係があるらしくって、何が書いてあるんだか分からなくって嫌になってしまいます。でもね、Haskell って凄いらしいじゃないですか、格好良いらしいじゃないですか。ここはちょっとがんばって色々考えてみましょう。 そもそも Haskell って何なのよ?¶ 何なんでしょうね、Haskell って。コンピュータ言語らしいんです、あ、それは分かってると。良く挙げられる性質は次な感じ?: 関数型言語 強い型付け 遅延評価 参照透過 ここでちょっと型に関して見てみましょう。試しに Haskell の実装の 1 つである Hugs で 1 について考えてみます。Hugs では :type や :info というコマンドで hugs に型の情報などを質問することができます。例え

    モナドって結局何なのよ? — join to Monad v0.1.3 documentation
  • 1