Tôi cố gắng để suy ra các loại biểu thức sau đây:Suy luận biểu thức đệ quy sử dụng Hindley Milner & chế
let rec fix f = f (fix f)
mà phải được cung cấp các loại (a -> a) -> a
Sau khi sử dụng dưới lên thuật toán (được mô tả trong các thuật toán loại Hindley-Milner suy luận khái quát) với sự cai trị thêm bên dưới:
a1, c1 |-BU e1 : t1 B = fresh var
---------------------------------------------------------
a1\x, c1 U {t' == B | x : t' in A} |-BU let rec x = e1 : t
tôi đang trái với các loại sau đây: t1 -> t2
và những hạn chế sau:
t0 = fix
t1 = f
t2 = f (fix f)
t3 = f
t4 = fix f
t5 = fix
t6 = f
t3 = t1
t3 = t4 -> t2
t5 = t0
t5 = t6 -> t4
t6 = t1
tôi không thể xem làm thế nào những khó khăn này có thể được giải quyết như thế mà tôi đang trái với kiểu (a -> a) -> a
. Tôi hy vọng nó là hiển nhiên đối với một người nào đó để xem là tôi đang đi sai.
Xin lưu ý rằng 'let rec' nên đơn giản là' let', nếu không bạn chỉ định nghĩa một hàm 'rec :: ((a -> b) -> a) -> (a -> b) -> b'. –
@ Ptharien'sFlame ví dụ mã xin lỗi không có trong haskell nhưng một ngôn ngữ kiểu ML. –
Được rồi, chỉ là bạn có câu hỏi được gắn thẻ "haskell" vì vậy tôi cho rằng đó là ngôn ngữ bạn đang làm việc. Lấy làm tiếc! –