2011-01-01から1年間の記事一覧

ウェブブラウザで関数型プログラミング! js_of_ocaml

js_of_ocaml が熱い。 Google の Dart とか、そんな場合じゃない!! OCaml で書かれたプログラムがなぜか JavaScript に変換され、それがブラウザで動く。 JS で型がついていないオブジェクトでも何となく型をつけて OCamlで型安全に呼び出せる! 既存の JS ラ…

OCaml-indent: OCaml で書いた OCaml ソースコードインデンタ

OCaml のソースコードのインデント整形には Emacs なら ocaml-mode, tuareg-mode, Vim なら ocaml.vim(?) や omlet.vim があります。便利です。でもどうも細かい部分が自分のスタイルと違ったり、特殊な改行をするとボロボロッとおかしなインデントをしてき…

OCaml search で欲しいものメモ

型情報から求めている関数を探すというのはそもそものアイデアは http://www.dicosmo.org/ResearchThemes/ISOS/ISOShomepage.html この辺を参照してほしいんですけど、型付き関数型言語でのプログラム開発の超強力なツールになっていて、OCamlBrowser, Hoogl…

CUFP 2011 のチュートリアルが発表されています

CUFP のチュートリアルプログラムがいつの間にか発表されていますね: http://cufp.org/conference/sessions/2011はじめ噂で聞いてた人がいなかったりしますが、選考はほとんど関わっていないので、何か事情があったりするんでしょう。一つ25分のトークと違っ…

Monad にしちゃう functor を通して今時の OCaml モジュールプログラミングを俯瞰

これは私用の覚え書きを適当に整形したもの(というか Sphinx で hatena 記法にしただけだけど)。だから他の人が読んで判るように全く書いていない。OCaml や ML のモジュールシステム、 value polymorphism、さらには relaxed value polymorphism、そして日…

OASIS が odb でビルドできるようになりました

私の環境 (OCaml 3.12.0, ubuntu, findlib) で自動ビルドに成功しました $ export PATH=$HOME/.odb/bin:$PATH $ export OCAMLPATH=$HOME/.odb/lib $ ocaml odb.ml --repo unstable oasis急速に進化しつつあるようです!他の環境でビルドできるかどうか知りま…

OCaml のパッケージシステム OASIS を使ってみた

この文書は新情報が入り次第、適時更新します。 今日も OCaml ライブラリのソースをダウンロードするところから始めている皆さん、こんにちは。 はっきり言って、面倒ですよね。一度ダウンロード、コンパイルに成功したら、それのソースツリーを置いておけば…

Planck という monadic parser combinator を公開しました

Planck: A Small Parser Combinator Library for OCaml I have released Planck, a small monadic parser combinators for OCaml. It includes a proof of implementation: OCaml syntax lexer and a parser which create 100% identical AST as the origina…

OCaml の let と let rec はなぜ別扱いになっているのか、決定版、もしくは OCaml 暦十何年だったか忘れたけど仕事で Haskell を一年使ってみた

はじめに断っておくが、全部Pros/Consのあるデザインチョイスなので、こうじゃなきゃいけないってことではない。ただ、 OCaml はこの選択をした、そいう事だ。前回の「経験15年の OCaml ユーザーが Haskell を仕事で半年使ってみた」 http://d.hatena.ne.jp/…

型システムの勉強なんかどうでもいいから、それにカバーされ無いところに気をつけて欲しい

コードがあった: match (modeA opts, modeB opts, modeC opts ..., modeG opts) with | (true, _, _, _, _, _, _) -> Opt.setMode A | (_, true, _, _, _, _, _) -> Opt.setMode B | (_, _, true, _, _, _, _) -> Opt.setMode C | (_, _, _, true, _, _, _) …

Fallout Shelter

3年前ボストンに行ったときに、港のショッピングモールの建物に在ったマークです。レンガ作りとはいえ、こんな窓のいっぱいある建物で死の灰が降ってきて助かるものでもないと思います。冷戦時の遺物。鼻で笑ってしまいそうになります。ただ、彼らは実際には…

OMake でディレクトリ単位の依存性(のような物)を記述する

大阪でおまけ言うたらコレ!サンプルソースは http://camlspotter@bitbucket.org/camlspotter/omake-depend-on-dir にあるよ。 OMake って大阪のオバチャンに言わせるところの「便利やけど使いにくいわぁ」「どっちやねん!」なツールですよね! OMakeは素晴ら…

CUFP 2011 Tokyo のお知らせ

C.U.F.P. (Companhia União Fabril Portuense)関数型言語の国際会議 ICFP の今年の開催地は東京です。ICFP のアジアでの開催は初めてですね。F# も正式にリリースされましたし Haskell も Haskell Platform が立て続けに出てます。Coq や Agda などの依存型…

今時 OCaml で非末尾再帰呼び出し使うなんて

非 し! -── ‐- 、 , -─-、 -‐─_ノ O 小 末 // ̄> ´  ̄  ̄ `ヽ Y , ´ ) C え 学 尾 L_ / / ヽ a | 生 再 / ' ' i m マ ま 帰 / / く l ジ で 許 l ,ィ/! / /l/!,l /厶, で だ さ i ,.lrH‐|'| /‐!-Lハ_ l /-!'|/l /`'メ、_iヽ よ れ l | |_|_|_|/| / /__!__ …

OCaml で LLVM -- 事始め

この記事は LLVM-2.8 とその OCaml binding を使った LLVM プログラミングの始め方について、良く判らないという声を聞いたので、理屈はともかく、どうやって始めるかを主眼に書いた物です。OCaml や Makefile を全く書いた事が無いし知りたくも無い、でも L…

Scoping of implicit rules + Scoping of .SCANNER rules

OMake のお話。% ワイルドカードの付いているルールは .SCANNER ルールも含め、global scope では無い! つまり、関数内で % を使ったルールを書いた場合、それは関数内でしか有効にならない! これを知らなかったので、% ワイルドカードのついた .SCANNER ル…

pa_monad の "unit binder" を少し拡張

OCaml もモナドをつかったプログラミングでは、私は別に bind operator (>>=) を使うのは全く苦じゃないんです。例えば、今私が遊んでいる LLVM のコードは builder をモナドにしてこんな感じになっています: let run clos lty_ret = B.cast clos lty_generi…

コードを短く書くことと読みやすく書くことは違う

module Z where import Data.Char data Foo = Alpha | Beta | Gamma | Delta | Eta | ... | Omega deriving (Show,Eq,Enum,Bounded) parse internals x = head $ (if all isLower $ take 1 x then [External i | i <- [minBound..maxBound], map toLower (sh…