Commits

camlspotter committed 925da15 Merge

Comments (0)

Files changed (1)

 Variant constructor を curry 化したい
 ======================================
 
-できない
+できない。 ``fun x -> Some x`` のように手で書くこと。
 
 なぜ OCaml のコンストラクタ(variant constructor)は partial application できないのか
 https://groups.google.com/forum/?fromgroups=#!topic/fa.caml/IOlkCcVBg5Q
 
 CamlP4 で各コンストラクタに対応する curried form な関数を定義することはできる。
-http://www.digipedia.pl/usenet/thread/14273/5152/
-現在も動作するかは不明。 まあ簡単に自作できる。
+https://github.com/janestreet/variantslib
+
+なお、コンストラクタをそのまま curry 化された関数にすることは P4 では不可能。
+コンストラクタの arity (引数の数)を調べる必要があり、型を知らない P4 にはこれは
+不可能である(内部で型推論を呼び出すという変態的なことを行わない限り)。
+コンパイラを改造するほうが早いと思われる。
 
 標準ライブラリの再帰関数を使ったら Stack overflow 出た
 ======================================================
 もちろん配管工記号があれば便利だし、それを使えばプログラムは短く読みやすくなる(こともある)。
 ただしそれはその記号に慣れている人だけだ。OCaml はそれを気にして記号は数値演算以外は
 ほとんど使わないことにした。もちろん配管工記号がなければプログラムは長くなる、
-が、それは別にいいじゃないか馬鹿っぽくても誰でも読みやすければ。
-これは演算子を組み合わせるいわゆる関数型ギミックの好きな人には耐え難いことかもしれないが
+が、それは別にいいじゃないか馬鹿っぽくても誰でも読めるのならば。
+これは記号を組み合わせる関数型ギミックの好きな人には耐え難いことかもしれないが
 OCaml の根底思想なので、嫌なら OCaml の制限上で上手く演算子をやりくりするか、別言語をやるしか無い。
 
 もちろん OCaml でプログラムを書いている人間も Haskell を触ったり F# を触ったりしていると
 配管工記号が欲しくなってくる。周りからせっつかれて、最近ようやく ``(|>)`` や ``(@@)`` が
 入ったのはそういう事情による。
 
+とにかく Syntax error が出るんです!
+===================================================================
+
+よく聞いてみると mli で関数を定義していた。
+人に質問をする時は、他人にも状況を再現できるような質問をするように心がけよう。
+
 Ocaml と書く奴は OCaml 使わんでいい
 ============================================