【发布时间】:2014-04-14 13:23:06
【问题描述】:
我有三个函数
boombangs xs = [if x < 10 then "BOOM" else "BANG" | x <- xs odd x]
length' xs = sum [1 | _ <- xs]
removeNonUppercase st = [x | x <- st, x `elem` ['A'..'Z']]
这是我得到的每个函数的类型(类型签名?)
*Main> :t boombangs
boombangs :: Integral a => [a] -> [[Char]]
*Main> :t length'
length' :: Num a => [t] -> a
*Main> :t removeNonUppercase
removeNonUppercase :: [Char] -> [Char]
当我将整数数组传递给 removeNonUppercase 或将字符串传递给boombangs 时,Haskell 应该给我一个错误。它也是,但是我没有在任何地方指定类型,它怎么知道它是错误的。
还有为什么即使它们在相同的输入上工作,boombangs 和 removeNonUppercase 的类型也不同。
如果问题看起来含糊不清或完全无知,我深表歉意。我刚刚开始学习 Haskell,我正在慢慢地围绕这个主要使用 C 和 python 编程的范式展开思考。
任何用于了解更多关于 haskell 和类型系统的资源也将不胜感激。
【问题讨论】:
标签: haskell