Parsec Parsec is a free monadic parser combinator library for Haskell. Parsec, 高速なコンビネーターパーサ Real World Haskell freely available online. Real World Haskell / 16. The Parsec parsing library Write Yourself a Scheme in 48 Hours 純粋関数型雑記帳 最強のパーザー、Parser Combinator Parser Combinatorというもの(その1) Parser Combinatorというもの(その2) Cleanで関数プログラミング: 5章 パーサコンビネータ プログラミング/Haskell/Parsec - Flightless wing HaskellのParse
Parsec の使い方の実例がないかと検索していたら、つぎのページを見つけた。 Simple Parsec Example: HTMangL Parsec を使って Haskell の Birs-style の文書のうち、コード部分に HTML のタグをつけ、更に特殊文字もエスケープ表現に置き換えるというプログラムだ。Parsec の基本的な使い方がわかる上に、いろいろなテクニックが洒落ていて面白い。 実は、前回までの数回分の記事は、このプログラムを読みこなすための準備だった。 コード部分だけを抜き出したものを次に示す。 module Main where import Text.ParserCombinators.Parsec eol = newline <|> (eof >> return '\n') tilEOL = manyTill (noneOf "\n") eol codeLi
最近、スタートHaskellで「カリー化された関数のメリットは何か?」という質問が出た。そのすぐ後に、kmizuさんがカリー化の誤用に対して警鐘を鳴らしてしていた。僕からするとkmizuさんの「カリー化の定義」も誤用に思えたので、調べるとともに考えたことのまとめ。 いろんな定義 「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。 部分適用という意味 これは明らかに間違い 「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと これはkmizuさんの定義。世間でもよく使われる。 「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと これは僕の定義。というか、Haskellコミュニティの定義。 「部分適用」の意味で使うのは明らかに間違いのなで排除。定義2と3について議論する。あとで、部分適用とは何かに
この記事はHaskell Advent Calendarのために書いたものです。 先ずは自己紹介でも。 大学の専門は機械でした。制御システム工学。まあ情報(工学|科学)科ではないということです。仕事で使っている言語はPHP。実用主義的な言語ですね。Haskellとは正反対です。 Haskellは私的に使うために習得しているところ。出来ればHaskellでプロトタイプ作成くらいはさくっと出来るようにはしたい。 ホーム言語というか得意な言語とかあるといいよなあー、とか思いつつ大学生協でRWHを立ち読みし、よしこれにしようと思い立ったのがHaskellはじめだったかな。 ポリシーが明快なものは良いですね。PerlとかRubyとかPythonとか結構好きです。PHPとか好きではない。最近はClojureなんかも結構いいなあ、などと思っていたり。 それはともかく、このHaskell習得時期にAdve
この記事は、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、[] (リスト)
1. 函数プログラミングの集い2011 チュートリゕル 「モナドについて」 株式会社 Preffered Infrastructure 田中 英行 tanaka.hideyuki@gmail.com 2. 自己紹介 • 田中英行 (@tanakh, id:tanakh) • 株式会社 Preferred Infrastructure (PFI) 勤務 – 検索エンジンのゕルゴリズムとか作ってます • Haskell (2004~) • C++ (1998~) • BASIC (1992~) • プログラミングコンテスト愛好家 – ICPC, ICFPC, CodeJam, TopCoder, …
Haskell で parser を書くには (初心者編) 勝手に Haskell Advent Calendar 2011 Haskell Advent Calendar 2011 にはエントリーできませんでしたけど、一人寂しく「勝手に Haskell Advent Calendar 2011」を開催して、わくわくクリスマスを待ちたいと思います。 目的: Parsec3 と attoparsec の基本的使用法, Applicative スタイルを習得する 前置き: Haskell で parser を書くにはどうすればいいのでしょうか? 私は、これを勉強すべく情報源を探しましたが、一体どこからどう始めればいいのか分からず、非常に混乱しました。「この記事を読めば大体概要が全部分かる」という情報源が日本語でも英語でも見つけられなかったからです。なので自分でまとめてみることにしました。 (私
昨日はリストへの関数適用からApplicativeパターンを見つけるところまでやりました。でも、GoFもいうように、パターンといわれるからには、あちこちで似たような用例が見つからないとおかしいですよね...論文では、リストのほかにモナドも例として取り上げています。先日話したap関数がモナドでの<*>にあたります: ap :: Monad m => m (a -> b) -> m a -> m b ap :: (Monad m) => m (a -> b) -> m a -> m b ap = liftM2 id liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) } というのがapの定義でした。 そして
第3回でFunctorクラスとMonadクラスを紹介しましたが,ここ数年の間に,FunctorクラスとMonadクラスの関係に少し変化が起こりました。Functorクラスよりも強く,Monadクラスよりも弱いクラス,すなわちFunctorクラスとMonadクラスの中間に相当するApplicativeクラスが現れ,広く使われるようになったのです。特にパーサー・ライブラリでは,Applicativeクラスおよび「Applicative版のMonoid」であるAlternativeクラスが欠かせないものになっています。 第48回でのparTraversable関数の説明,および第50回で取り上げたparMap関数/parMapM関数の定義の文脈部分で登場したTraversableクラスも,Applicativeとのかかわりが深いクラスです。 Applicativeに対する理解は,今やHaskel
wvogel00のために、昔書いたParsecを使ったコードを載せてみます。コメントに書いてあるのはコードに直す前のEBNFです。 import Text.ParserCombinators.Parsec run :: Show a => Parser a -> String -> IO () run p input = case (parse p "" input) of Left err -> do putStr "parse error at " print err Right x -> print x --expr = factor ('+' factor | '-' factor)* expr :: Parser Float expr = do l <- factor rs <- many ((do char '+' n <- factor return $ (+) n ) <|
お台場のTOKYO CULTURE CULTUREで開かれたHaskellナイトというイベントで、ライトニングトーク「Haskellゴング」に出てでしゃべってきた。 Parsec 3活用事例: Keepalived構文チェッカ (Haskell Gong 2009)View more documents from ma0e. ソースコードはgithubで。 http://github.com/maoe/shiritori http://github.com/maoe/text-keepalived Parsec 3からモナド変換子の実装が入ったことで、パーザ内部でI/Oすることができるようになったため、include文のパーズが簡単になったというお話。text-keepalivedの方は仕事で使っています。アルバイトも募集しています。 Parsec 2に関する補足 id:kazu-yama
Next time you pull out your smartphone to use a popular application — whether it’s to price check items in a store, to tweet or to check your cloud-based calendar — you might thank Martin Odersky. Odersky is something of a superstar in the Java programming world. He wrote Javac, the most widely used Java compiler, and now he’s the force behind the fast-growing Scala programming language. That lan
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く