功能成分中的类型检查

时间:2014-10-26 12:54:17

标签: haskell

为什么在执行以下操作时ghci不会抛出类型错误?

let d = tail . head

这不是说尾巴想要[a]而头部只给它一个吗?

1 个答案:

答案 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]

它们是可组合的。