Haskell

ReadP

「GHCのメジャーバージョンが知らぬ間に7に!」というくらいHaskell離れしてましたが,とあるスクリプトを作るために久しぶりに使ってみた。 とりあえず必要なのはParserCombinator。以前に作った自前のモノでもよいのだが,今回はReadPを使うことにした(Te…

Haskellで動的スコープ

参考:http://www.haskell.org/ghc/docs/latest/html/users_guide/other-type-extensions.html#implicit-parameters GHCでは"-XImplicitParams"というオプションで暗黙的なパラメータというのが使えるようになる。こいつがどうやら動的スコープみたいなもの…

Polymorphic Recursion

data T a = K (T Int) (T a) f :: T a -> a f (K x y) = if f x == 1 then f y else undefined The Haskell 98 Reportの「4.4.1 Type Signatures」より。型シグネチャのありなしで再帰関数の型が変わる例。型シグネチャなしだと T Int -> Int と推論される。…

The Monomorphism Restriction

単相性制限 規則 1. 与えられた宣言グループが制限を受けないというのは以下の場合であり、その場 合にかぎる。 (a): そのグループ内のすべての変数それぞれが関数束縛あるいは 単純パターン束縛により束縛されている。且つ (b): そのグループ内の単純パター…

ghciで複数行入力

今さらだけどghciの使い方を勉強してみる。基本じゅうよー。 式の途中に改行を入れる Prelude> :{ Prelude| let { fact 0 = 1 Prelude| ; fact n = n * fact (n - 1) Prelude| } Prelude| in fact 5 Prelude| :} 120 オフサイドルールに従ったレイアウトは使…

わかんね

Haskellわかんね。そろそろ他の言語に移るべきか。

GHCの最適化

『Beautiful Code』にカーニハンの正規表現マッチャに関するエッセイがのってるのを思い出し,さっそく読んだ。どうやら,『プログラミング作法』の最終章にも正規表現について書かれているらしい。もちろん,私は『プログラミング作法』も持っているので,…

正規表現

自前Monadic Parser Combinatorsを使って正規表現を実装してみた。本当のことを言うと正規表現を実装するためにParser Combinatorsを書いたんだけどね。というか,Parser Combinatorsをああ書けば正規表現を簡単に実装できるのではないかと思っただけという…

Monadic Parser Combinators

四角い車輪を再発明してしまった。 今後はParsecを使おうと思っていたのだが,Monadic Parser Combinatorsってどんな感じに実装するのかが気になってしまった。そこで,自分なりに考えてParsecのソースを見て確認しよう,そしてそれで終わり,という予定だっ…

Parsecを使ってみた

module Parser where import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Char data Expr = E_Val Val | E_Seq [Expr] instance Show Expr where showsPrec d (E_Val v) = showsPrec d v showsPrec d (E_Seq []) = showString "()"…