2012-04-26 13 views
1

は、私はクラスのメソッドを作っている、と私は、このタイプを持っているしたいと思います:のOCaml - 間違った関数型

unit -> (dir -> 'b)

しかし、私の実際の方法:

method iter() = fun x -> match x with 
| Up -> if (Stack.is_empty pz) then raise Stack.Empty else if (Stack.length pz = 1) then failwith "Cannot go up" else (ignore (Stack.pop pz) ; {< a = (Stack.top pz) >}) 
| Down(v) -> match (Stack.top pz) with 
| Noeud(o, {contents = []}) -> raise Not_found 
| Noeud(o, {contents = l}) -> if mem_assoc v l then ((Stack.push (assoc v l) pz) ; {< a = (Stack.top pz) >}) else raise Not_found 

はタイプunit -> dir -> 'bを持っています

どのようにして最初のタイプにすることができますか?ここで

は、カスタムタイプです:

type 'a arbre = Noeud of 'a option ref * (char * 'a arbre) list ref 
    type dir = Up | Down of char 

編集:それは、特定のインターフェイスに準拠することができ、かつ型の不一致により、それがコンパイルされませんので、私はこれを必要とします。 ありがとう!

答えて

6

これは問題ではありません。 unit -> (dir -> 'b)unit -> dir -> 'bはOCamlで同じタイプです! (タイプアローは右結合です)

実際のエラーメッセージを表示して、問題がどこにあるか知ることができますか?

補足:実際に試してみましたか? 以外の問題がなければ、うまくいくことがわかります。

+1

実際にはエラーメッセージは表示されません。コンパイルは正常です。しかし、私はいくつかの事前に書かれたテストで私のコードを実行すると、他のfuntionsを見つけることはできません...私はこのメソッドのインターフェイスを変更しようとすると、それは正常に動作します。 – Pacane

+0

「事前に書かれたテスト」や「他の機能が見つからない」という意味を理解していません。再度、実際のエラーメッセージと例が役立ちます。 :) – Ashe

+0

結局のところ、それは動作していた、ちょうどインターフェイス名の型。あなたの助けをありがとう。 – Pacane

関連する問題