为什么当我执行以下命令时,ghci没有抛出类型错误?
let d = tail . head
这里应该说尾部想要 [a],而头部只给了一个 a?
let d = tail . head
这里应该说尾部想要 [a],而头部只给了一个 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]
它们是可组合的。
d
的类型,你会发现它应该是[[a]] -> [a]
。 - Sassa NF