Khi sử dụng GHC thông dịch viên tương tác, nó có thể yêu cầu loại suy ra của một biểu thức:GHCi chọn tên cho các biến kiểu như thế nào?
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Dường như phải mất tên của các biến kiểu từ chữ ký kể từ map
là defined như
map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
trong Prelude. Điều đó làm cho rất nhiều ý nghĩa! Câu hỏi của tôi là: làm thế nào là loại tên biến được chọn khi không có chữ ký được đưa ra?
Một ví dụ sẽ
Prelude> :t map fst
map fst :: [(b, b1)] -> [b]
nơi nó chọn tên b
và b1
. Rõ ràng là đổi tên phải diễn ra, nhưng chỉ đơn giản là bắt đầu với a
, b
... lẽ ra đã giúp
map fst :: [(a, b)] -> [a]
thay vào đó, mà tôi thấy hơi dễ đọc hơn.
Cảm ơn, đó là một lời giải thích tuyệt vời! Tôi đã không nghĩ đến trường hợp bạn muốn một số 'n' được đổi tên nhưng vẫn liên quan. –
Nó không phải là không thể. (unSafeCoerce hoặc chỉ đơn giản là cũ '_ | _') – PyRulez