haskell - 函数组合中的类型检查

标签 haskell

当我执行以下操作时,为什么 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/

相关文章:

java - 从 Java 调用 Haskell,中间使用 C

haskell - 我如何 "Extract"Haskell中某个角度的值

haskell - 类型系统中的强制Maybes

haskell - Splice 是否支持 Unicode?

haskell - ghc armv7 二进制 + cabal ?非法指令

windows - Windows 上的 GHC + wxHaskell

haskell - 使用延迟模态从定点运算符计算(无限)树

haskell - 单步导管

list - 使用斐波那契数列创建无限列表

haskell - 如何正确定义像 "any"这样的函数