4

このエラーに関する日本語のページしか見つけられなかったので、ログに記録してここで質問しようと思いました。

次の FSharp アクティブ パターンがある場合 (簡略化された例):

let (|InRange|OutOfRange|) from too =
    function
    | input when input >= from && input <= too -> InRange
    | _ -> OutOfRange

それは完全にコンパイルされ、そのタイプを次のように示します。

val ( |InRange|OutOfRange| ) :
  from:'a -> too:'a -> _arg1:'a -> Choice<unit,unit> when 'a : comparison

しかし、次のように使用しようとすると、エラーがスローされます。

let test i = match i with
             | InRange 10 20 -> "in range"
             | _ -> "out of range"

スロー: エラー FS0722: 1 つの結果を返すアクティブなパターンのみが引数を受け入れることができます

それぞれがNone/Some(x)を返す2つの単一ケースのパラメーター化されたアクティブパターンに変えることで解決できますが、なぜそうすることが許可されていないのか、および/または私が使用できる構文があるのか​​ どうか疑問に思っています認識していません。また、なぜコンパイルされるのか疑問に思っていますが、使用できませんか?

4

1 に答える 1