タグ

functorに関するmnruのブックマーク (6)

  • A language and its interpretation - Learning free monads

  • 第51回 FunctorとMonadの間にあるApplicative

    第3回でFunctorクラスとMonadクラスを紹介しましたが,ここ数年の間に,FunctorクラスとMonadクラスの関係に少し変化が起こりました。Functorクラスよりも強く,Monadクラスよりも弱いクラス,すなわちFunctorクラスとMonadクラスの中間に相当するApplicativeクラスが現れ,広く使われるようになったのです。特にパーサー・ライブラリでは,Applicativeクラスおよび「Applicative版のMonoid」であるAlternativeクラスが欠かせないものになっています。 第48回でのparTraversable関数の説明,および第50回で取り上げたparMap関数/parMapM関数の定義の文脈部分で登場したTraversableクラスも,Applicativeとのかかわりが深いクラスです。 Applicativeに対する理解は,今やHaskel

    第51回 FunctorとMonadの間にあるApplicative
  • Functors, applicative functors, monads

    This diagram demonstrates the relationship between certain Functor, Applicative and Monad operators. See the Typeclassopedia for details. ⚓ The (→) a instance This diagram demonstrates the properties of certain Functor, Applicative and Monad operators when using the (→) a instance. (It’s interesting to note how the types, when specialized to the (→) a instance, dictate the only correct behavior fo

  • 第3回 mapからモナドを理解する

    今回は「モナド(monad)」について説明します。モナドはHaskellの重要な特徴の一つなので,名前くらいは聞いたことがある人が多いでしょう。ただ,「モナドは難しい」という声もよく聞きます。 モナドとは一体なんでしょうか。前回,「HaskellはIOを取り扱うためにモナドと呼ばれる特別な仕組みを使用することで有名です」と書きました。Haskellは遅延評価を行うため,プログラマが処理の順番を確実に指定することができず,そのままでは入出力の処理には不向きです。モナドを使えば制御構造を導入できるため,この問題を解決できます。前回でいえば,(IO a -> IO a)にマッチする関数――finallyやprintThenAdd――を定義している部分がモナドに相当します。また,GHCiのプロンプトにもモナドが使われています。このように入出力操作を行うモナドの代表格が「IOモナド」です。ライブラリ

    第3回 mapからモナドを理解する
  • Applicativeのススメ - あどけない話

    この記事の目的は、Applicative 信者による Applicative スタイルの布教です。 簡潔に結論を述べると、 foo = do a <- m1 b <- m2 return (f a b) のようなコードを書きたくなったら foo = f <$> m1 <*> m2 と書きましょうということ。 合い言葉は、「do と return をなくせ!」です。 FunctorとMonadの間 Functor を特殊化した型クラスがMonadで、Monadの方が強力です。なぜなら、メソッドが増えるからです。 Functorのメソッドはfmapです。fmapの別名を (<$>) といいます。(この記事では、(<$>) と liftM を同一視します。) そして、Monadのメソッドは、ご存知の通り (>>=) と return です。 FunctorとMonadの間にApplicative

    Applicativeのススメ - あどけない話
  • QAで学ぶMonad - あどけない話

    この記事は、Monad でつまづいた Haskeller のための Monad 再入門です。 Monadとは何ですか? Monad とは、単なる型クラスの一つです。難しいという風評もありますが、それ以上でもそれ以下でもありません。 この型クラスのメソッドは、return と >>= です。 class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a つまり、以下を満たす型の集合が Monad です。 m a で表現できるように一つの型変数を格納するコンテナ型 >>= と return を実装 return は新しいコンテナを作り、>>= は二つのコンテナを合成します。 Monad のインスタンスは失敗系と状態系に大別できます。以下に代表的なインスタンスを示します。 失敗系: Maybe、[] (リスト)

    QAで学ぶMonad - あどけない話
    mnru
    mnru 2011/07/05
  • 1