2016-12-31 5 views
0

カスタムクラスmyTypeの値を受け入れ、myType optionを返す関数を記述したいと思います。私の問題が署名、コンテンツ、または戻り値であるかどうかは不明です。例えばOCamlオプションの戻り値とオプションの一致

、私は(それを簡略化し、本当の意味を持っていないです)次のように記述しようとしました:

let rec myFunc (t:myType) myType option = 
    let t2 = myFunc t in 
    match t2 with 
    | None -> None 
    | _ -> t 

そして私は、次のコンパイルエラーを取得しています:

Error: This pattern matches values of type 'a option but a pattern was expected which matches values of type 'b -> 'c -> 'd

ありません私の構文が間違っているか、私がOCamlを誤解している場所を確認してください。

答えて

5

私は行方不明コロンとSome参照:

let rec myFunc (t:myType): myType option = 
    let t2 = myFunc t in 
    match t2 with 
    | None -> None 
    | _ -> Some t 

少し合理化されたバージョン:

let rec myFunc (t:myType): myType option = 
    match myFunc t with 
    | None -> None 
    | _ -> Some t 
+0

それは私には無限ループのように見えるが。 – RichN

+0

もちろんです。 OPは言う:(単純化され、本当の意味はない) –

関連する問題