为什么在执行以下操作时ghci不会抛出类型错误?
let d = tail . head
这不是说尾巴想要[a]而头部只给它一个吗?
答案 0 :(得分:8)
如果类型更专业,比如
head :: [Int] -> Int
tail :: [Int] -> [Int]
然后,tail.head将会输入错误的类型。
但就目前而言,类型是
head :: [a] -> a
tail :: [b] -> [b]
我使用了类型变量“a”和“b”,这样你就不会认为它们必须是相同的。 在这种情况下,a = [b],类型变为
head :: [[b]] -> [b]
tail :: [b] -> [b]
它们是可组合的。