λx. x K S K @はてな

このブログ内に記載された文章およびコードの著作権は,すべて Keisuke Nakano に帰属します.

がんばればできる

こちらから勝手に引用.

Noneというコンストラクタを持つデータ型を定義してしまうと、option型をどうがんばっても使えなくなる。
その上書き定義の前に何か書き加えてもいいんであれば簡単に回避できるけど, 定義した後となるとできなさそうな気もする.

でも,がんばればできる.

let none : _ option = Obj.magic []
function None -> ... | Some x -> ... とかいうパターンマッチについても, function n when n = none -> ... | Some x -> ... でどうにかなる. ただし, Some じゃないものは None なので ブランチの順序を変えれば when 節は不要だが. (ああ,また Obj.magic を使ってしまった…)

しかし,添付ライブラリには option 型を返すものってないんだなぁ. find 系の関数は,Not_found の例外を返すものばかり. どうでもいいけど,この Not_found ってのは OCaml ではかなり曲者. ちゃんと catch する手続きを書いておかないと, 誰が Not_found したのか分からなくてバグ取りが面倒だったりする.