予は如何にしてMonadophobiaを克服しつつあるか Monadについて実は数日前にようやく理解しはじめた。思えば10年前に最初にそれが函手(functor)だって教えてくれれば、少なくとも簡単なイメージ形成と基礎的な使い方はすぐに理解できたのに、と思う。HaskellのMonadを理解するために圏論を理解する必要はありません、ってのは本当かもしれないが、函手だって言われれば直観的にはすぐに理解できる。要は fmap はHaskellの函数全体が作る圏からその部分圏への函手です、fmapで函数の構造を保存したまま部分圏の函数が得られますよ、というか函手の条件を満たすようなfmapを提供することによってそういう構造保存的な部分圏を提供するんですよ、というだけのことである。ところが、部分圏の射自体がHaskellの圏の射だから、当の函手が自分自身に適用されてm (m a)のようにMonad
ekmett勉強会に来ています。ekmettさんがオンライン参加されています。 I love profunctors. They're so easy / liyanghuさん 傘を指し棒に使うと言う斬新なプレゼン。詳細はこちら。 HaskellのFunctorは共変 Predicate (a -> Bool) は Functor ではない (半変)関手ではある Data.Functor.Contravariant contramap g (Predicate p) = Predicate (p . g) 他、Const、Comparison (a -> a -> Ordering)、Op (b -> a)が反変関手 双関手 : 引数を2つとる関手 bimap :: (a -> c) -> (b -> d) -> f a b -> f c d Either、(,)、Biapplicativ
この記事の目的は、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
GHC 6.10 に付随していた Parsec のバージョンは 2 だ。現在の Parsec のバージョンは 3 であり、以下のような特徴がある。 モナド変換子として実装されているので、下回りを自由に変更できる。 ByteString をモナドのインスタンスにすることで、入力に ByteString を許すモジュールが提供されている Applicative と Alternative のインスタンスになっている。 特に後者は重要だ。Applicative スタイルで書かないパーサーは、パーサーじゃないって思えるほどに。 僕が公開しているライブラリー群は、Haskell Platform で Parsec 3 が提供されるだろうという予想の元に、Parsec 3 を使っていた。しかし、Haskell Platform で提供されたのは Parsec 2 だ。 結局、Parsec 2 と Pa
Home › software › haskell › The basics of applicative functors, put to practical work Applicative functors are gorgeous and versatile creatures, but as is common in Haskell, they lack a little in documentation. The paper that Conor and Ross wrote introducing them is good, but dense. What if we were to skip all the scene-setting kerfuffle, and plunge into using them by example? I won’t attempt to d
In typical UDP programming, unconnected sockets are used both in the client and server sides. sendto() is used to specify a peer address while recvfrom() is utilized to receive a peer address. In the quic library in Haskell, I used connected sockets for performance reasons. If a connected socket is created for a QUIC connection, recv() can receive data from a specific peer. This means that data is
第3回でFunctorクラスとMonadクラスを紹介しましたが,ここ数年の間に,FunctorクラスとMonadクラスの関係に少し変化が起こりました。Functorクラスよりも強く,Monadクラスよりも弱いクラス,すなわちFunctorクラスとMonadクラスの中間に相当するApplicativeクラスが現れ,広く使われるようになったのです。特にパーサー・ライブラリでは,Applicativeクラスおよび「Applicative版のMonoid」であるAlternativeクラスが欠かせないものになっています。 第48回でのparTraversable関数の説明,および第50回で取り上げたparMap関数/parMapM関数の定義の文脈部分で登場したTraversableクラスも,Applicativeとのかかわりが深いクラスです。 Applicativeに対する理解は,今やHaskel
Do Applicative Functors generalize the S & K Combinators? 2/01/2011 If the title hasn't scared you off yet, here's the story: I was hacking on someone else's code on the plane and trying to wrap my head around some Applicative class code; in particular the code in question used the Applicative instance for ((->) a) i.e. functions. This turned my brain to cream-of-wheat and I had to take a break. I
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く