当我执行以下操作时,为什么 ghci 没有抛出类型错误?
let d = tail . head
这不是说 tail 想要 [a] 而 head 只给它 a 吗?
最佳答案
如果类型更专业,例如
head :: [Int] -> Int
tail :: [Int] -> [Int]
那么 tail.head 确实是错误的类型。 但就目前情况而言,类型是
head :: [a] -> a
tail :: [b] -> [b]
我使用了类型变量“a”和“b”,这样您就不必认为它们必须相同。 在这种情况下,有 a = [b],类型变为
head :: [[b]] -> [b]
tail :: [b] -> [b]
而且它们是可组合的。
关于haskell - 函数组合中的类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573177/