問題は違うんだけど、

let get = function
    `Some x -> x
  | `None -> raise NonoException
  |  y -> y

とかやってみる。getをかましておけば、optionと普通の値をシームレスに扱える。

わけはない。

# get (`Some "foo")  → "foo"
# get `None          → 例外
# get (`A "bar")     → (`A "bar")
# get "baz"          → 型付け失敗

当たり前か。