2007-09-01から1ヶ月間の記事一覧
desumasuさんがid:desumasu:20070913で触れられてるDictionary Passing Styleについて書いてみようと思います。参考:栄光のグラスゴーHaskellコンパイルシステム利用の手引以下のようなテスト用モジュールを実験の為に使用します。 module Test (show2 , sho…
GHCのコードを眺めていてmain-isというオプションがあることに気づきました。これを使うとmainとして使用する関数を変える事ができるみたいです。試しにC言語風のmainを書いてみました。 -- Cmain.hs module Cmain() where import Main (main) import System…
Haskellでは型クラスという仕組みにより、ポリモーフィズムが実現されています。 例えば、Showというクラスの場合だと、以下の様にshowという名前の関数により異なる実装が呼び出されるようにできます。 > show 1 "1" > show 1e3 "1000.0" > show True "True…
Template Haskellを利用してコンパイル時に定数計算を行う方法とIO処理をする方法について書きます。コンパイル時定数計算といえば、C++でのテンプレートメタプログラミングを利用した方法などが有名ですが、同じ事をしてみます。簡単な例として、フィボナッ…
id:MaD:20070906ではTemplate Haskellのコードを書く際に直接Exp型のデータを操作しましたが、Quasi-quote bracketsを使うともっと簡単にテンプレートを書くことができます。ghc, ghciを起動する際にはオプションとして-fthが必要であることに注意してくださ…
本当はTemplate Haskellについて勉強する予定の日だったのだけれど、ちょっと違う方向へそれてしまったので今日勉強したMulti-paramter classというものについて書きます。きっかけは「ParsecでByteStringを使いたい」と思ったことです。同じ事に興味を持っ…
どう書くorgに良い題材があったので、それを使ってTemplate Haskellのコードを書いてみました。 問題は全ての組み合わせです。Haskellではリスト内の要素の型は固定なので、組み合わせはタプルで表すことにします。 また、可変長引数も無いのをどうにかしま…
とりあえずいろんなモジュールを先に見とこうということで、Control.Applicativeについて調べました。Applicativeは関数適用を抽象化したもののようです。Applicative.hsでは主に以下の演算子が用意されています。*1 pure *> liftA liftA2 liftA3 Applicativ…
計算を静的に表す手段としてArrowが使えるという事をid:MaD:20070816で書いたわけですが、もっと強烈な手段としてTemplate Haskellがあります。以前作ったOpというArrowでは(>>>)演算によって繋がれたArrowを一旦構文木としてデータ化し、最適化をした後に関…