错误使用简单的 Haskell 函数
Erroneous use of simple Haskell function
我正在学习 Haskell 并且有很多类型检查对我来说似乎完全没有意义。我写了一个简单的函数来计算给定列表中给定元素的出现次数,如下所示:
-- Count the number of occurrences of an element in a list.
countOcc :: (Eq a) => [a] -> a -> Int
countOcc xs x = length $ filter (== x) xs
现在,通过以下调用显式使用它:
countOcc "str" 's'
这执行得很好,returns 正确。但是,这会导致错误:
countOcc "str" "str"!!0
我不知道为什么这会导致错误。 "str"!!0 给出 's',一个 Char,与第一次调用的第二个参数中传递的类型完全相同。
我确信 Haskell 的类型系统有一些细微差别我忽略了,或者还没有提出来。理想情况下,我想知道 为什么 这是错误的,此外,根据 Haskell 的意识形态,我想知道为什么 应该是错误的。
以下工作正常:
countOcc :: (Eq a) => [a] -> a -> Int
countOcc xs x = length $ filter (== x) xs
main = print $ countOcc "str" ("str"!!0) -- 1
据我所知,函数applictaion
的优先级最高; !!
虽然优先级为9,但仍低于函数应用
我正在学习 Haskell 并且有很多类型检查对我来说似乎完全没有意义。我写了一个简单的函数来计算给定列表中给定元素的出现次数,如下所示:
-- Count the number of occurrences of an element in a list.
countOcc :: (Eq a) => [a] -> a -> Int
countOcc xs x = length $ filter (== x) xs
现在,通过以下调用显式使用它:
countOcc "str" 's'
这执行得很好,returns 正确。但是,这会导致错误:
countOcc "str" "str"!!0
我不知道为什么这会导致错误。 "str"!!0 给出 's',一个 Char,与第一次调用的第二个参数中传递的类型完全相同。
我确信 Haskell 的类型系统有一些细微差别我忽略了,或者还没有提出来。理想情况下,我想知道 为什么 这是错误的,此外,根据 Haskell 的意识形态,我想知道为什么 应该是错误的。
以下工作正常:
countOcc :: (Eq a) => [a] -> a -> Int
countOcc xs x = length $ filter (== x) xs
main = print $ countOcc "str" ("str"!!0) -- 1
据我所知,函数applictaion
的优先级最高; !!
虽然优先级为9,但仍低于函数应用