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…

名前を考え付くと後からプロジェクトがやって来る。

この駄文は関数型イカ娘アドヴェントカレンダーという瀕死のカレンダー http://partake.in/events/5784afd8-d43b-4cbe-9256-430d5ababa2b を一日延命させるためだけに書かれました。先ほどのエントリで イカに Calmar という言語の名前を思いついた。早く記…

烏賊と私 : 下足言語 Calmar

烏賊コレクション 私の烏賊コレクション(ただし一つだけしかないんだけど)をご紹介します。ポスターです。家の玄関に飾ってあります: 「オストリ海溝から釣り上げし大王烏賊(7m)、ビアリッツ海洋博物館にて公開さる!国内初!」て書いてあります。2002年のこと…

名前を考え付くと後からプロジェクトがやって来る。

先ほどのエントリで イカに Calmar という言語の名前を思いついたかって書いたんだけど、Sphinx の練習で Programming language Calmar の架空のマニュアルを作っていたら、同僚がそれを見て、おおぉ、もしかして Calmar って、これこれこういう言語!?ホス…

烏賊と私 : 下足言語 Calmar

烏賊コレクション 私の烏賊コレクション(ただし一つだけしかないんだけど)をご紹介します。ポスターです。家の玄関に飾ってあります: 「オストリ海溝から釣り上げし大王烏賊(7m)、ビアリッツ海洋博物館にて公開さる!国内初!」て書いてあります。2002年のこと…

経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた

今の会社に移って半年経ちました。めでたく試用期間終了です。といっても別に試用期間中に密かに首を切られるような事をしたとか、逆に試用期間が終わったからと言ってこれで定年までのうのうと働ける、という訳ではありません。未来は全く判りません。まあ…

キャミバ様が id:ymotongpoo を木人形にされるようです

事の次第 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; …

昔誰かが書いたけど誰も読まなかった「若いλ彦」

半年ほど前に、誰かがベロベロに酔っ払ってただ勢いで書いたゴミをさっき見つけました。すいません。今日はこれで許してください。今月はしょうもないことでも出きるだけ毎日出して行きたいと思います。 「若いλ彦」 http://anond.hatelabo.jp/2010061123231…

モジュールを「拡張」する― 3.12.0 の機能を使って…(みるけどうまくいかない)

OCaml のモジュールが大好き!! 3.12.0 インストールしてるよ!という人だけ、読んで下さい。それ以外の人は、あんまりわかんないと思う。 前回のまとめ 綺麗にドキュメント(.mli)を書きつつ、既存OCamlモジュールを「拡張」する方法を紹介しました (* xmystdl…

モジュールを「拡張」するテクニック

すとっどりぶ ご存知のように OCaml の stdlib は「標準ライブラリ」ではありません。「すとっどりぶ」です。大事な事などでもう二度言いますってやつです。これは OCaml コンパイラがコンパイルできる様にするための最小限のライブラリ+ INRIA の人たちの…

きんこん土佐日記はしょうおもろいがやき、おんしも買うぜよ

なんだかネットで「きんこん土佐日記」という高知新聞の四コマ漫画が面白いち評判だったので、ちょっと読んでみたらこれが実際すごく面白い。(まあネットで探したらいくつか読めますわ、自分で探してね)毎週日曜更新のWeb判はこちら http://www.kochinews.…

Fall back to 3.11.2

自分の使っている OCaml のバージョンを 3.12.0 から 3.11.2 に戻しました。OCaml 3.12.0 には First class module や type scheme annotation など非常にあると便利な機能が新しく入っているので、できれば使いたいのですが、問題は付属ツールである CamlP4…

tuareg-mode 2.0.x の case -> に関するインデント修正

tuareg-mode については、 http://d.hatena.ne.jp/camlspotter/20100605/1275695973 でも書いたとおり、最新版の 2.0.x はまだちょっと手を出すのは早いのかなあと思っていましたが、そうも言っておれず…2.0.x では match, try, function の case 文での -> …

OMake pitfall around multiple targets

Now I made a clearer example. Some bug or confusion around multiple target rules: # Checked by OMake 0.9.8.5 (release 3) build [Sat Nov 7 15:22:19 2009] on rothera from Ubuntu F1(v)= echo $'F1(v)' F1_a(v)= echo $'$(F1_a v)' F2()= echo $'F2…

( ゚∀゚)o彡°O'PyCaml

( ゚∀゚)o彡°O'PyCaml リリースして無いけど公開してるよ ( ゚∀゚)o彡°O'PyCaml は OCaml から Python/C API を使って Python ライブラリを呼び出すインターフェースです。大体出来ました。使いながらチューンしていきます。 Bitbucket で公開してます: http://b…

Softbank の Desire と PhotoVision のプロモに関して

Softbank の Android携帯、Desire と Desire II と、Desire II の販促プロモーションとして安売り(本体0円)されている、デジタルフォトフレーム、PhotoVision について、少なからず不愉快な思いをしましたので、他の人がはまらないよう、ここに書いておきま…

Strange behavior of OMake's 0-ary functions

I've found strange behaviour of 0-ary functions in OMake 0.9.8.5. Maybe a bug. Try the following:Here, arc.tar should contain extract/hoge.txt: Extract()= println(extract tar archive) tar xvf arc.tar Extract2()= println(extract tar archive…

OMake 不思議時空

OMake で不思議な事のメモ。役に立つ人には役に立つだろう。 空文字列のリテラルが無い? 普通のクォート "" や '' は評価されても消えない 特殊クォート $"..." では " は消えるが、$"" と書くことは出来ない。 $""..."" と解釈されるため 空文字列の入った…

ocamlspot.vim

OCamlSpotter に付属している ocamlspot.vim は、branch 3.12.0 に入ってます。$ hg clone http://hg.ocamlcore.org/cgi-bin/hgwebdir.cgi ocamlspotter/ocamlspotter/ -r 3.12.0 $ ls ocamlspotter/ocamlspot/ocamlspot.vim ocamlspotter/ocamlspot/ocamlsp…

補足その2 OCaml Meeting 2010 in Nagoya で話しました

Find Your White Caml というタイトルで一席噺させていただきました。スライドは http://www.slideshare.net/camlspotter/um2010 にあります。見てやってください。テーマは「OCaml で書かれた大規模なコードベースを如何に早く理解し、チームの重要な一員に…

補足その一

Eric Stokes の CmiGrep 1.5 は OCaml 3.12.0 ではコンパイルできません。ちょっとした手直しが必要です。GPL なので、直したものを置いておきました。ご活用ください。 ( http://jun.furuse.info/hacks/cmigrep-1.5-ocaml-3.12.0.tbz?attredirects=0&d=1 )