我正在學習 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'
這執行得很好,并正確回傳。但是,這會導致錯誤:
countOcc "str" "str"!!0
我不知道為什么這會導致錯誤。"str"!!0 給出 's',一個 Char,與第一次呼叫的第二個引數中傳遞的型別完全相同。
我確信 Haskell 的型別系統有一些細微差別,我忽略了,或者還沒有提到。理想情況下,我想知道為什么這是錯誤的,此外,根據 Haskell 的意識形態,我想知道為什么它應該是錯誤的。
uj5u.com熱心網友回復:
以下作業正常:
countOcc :: (Eq a) => [a] -> a -> Int
countOcc xs x = length $ filter (== x) xs
main = print $ countOcc "str" ("str"!!0) -- 1
據我所知,函式應用 的優先級最高;雖然!!優先級為9,但仍低于函式應用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434057.html
