2016-12-31 11 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 говорит: (он упрощен и не имеет реального смысла) –