同じオプションを使用して 2 つのアクティブなパターンを作成できないことに気付きましたが、類似したオプションを使用して 2 つのアクティブなパターンを警告なしで作成できます。
let (|A|B|C|) c =
if (c = 'a') then A
else if (c = 'b') then B
else C
let (|A|B|D|) c =
if (c = '1') then A
else if (c = '2') then B
else D
したがって、この方法で一致させる場合:
let check myvar =
match myvar with
| A -> printf "match A\n"
| n -> printf "match other %A\n" n
これが起こります:
check 'x' // match other 'x'
check 'a' // match other 'a' !!
check '1' // match A
(|Direct|Indirect|)
たとえば、 (route) と(|Alternating|Direct|)
(current) のように異なるセマンティック コンテキストが原因で、同じ単語が異なるパターンで表示される可能性がある状況で、既存のアクティブなパターン オプションを誤って上書きしてしまうことを少し心配しています。
どうすればこの状況を回避できますか?