Я сделал метод класса, и я хотел бы иметь этот тип: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
Edit: мне это нужно, чтобы он мог выполнить к определенному интерфейсу, и из-за несоответствия типа, он не будет компилироваться. Спасибо!
Фактически, у меня нет сообщения об ошибке, теперь он компилируется отлично. Но когда я запускаю свой код в некоторых предварительно написанных тестах, in не найдет других функций ... Если я попытаюсь изменить интерфейс только для этого метода, он отлично работает. – Pacane
Я не уверен, что понимаю, что вы подразумеваете под «предварительно написанными тестами» или «не найдет других функций». Опять же, реальные сообщения об ошибках и примеры помогут. :) – Ashe
В конце концов, он работал, просто тип в имени интерфейса. Спасибо за вашу помощь. – Pacane