[英]Understanding the use of brackets in the all function in Haskell?
我試圖圍繞Haskell的編程約定和規則進行討論。 我感到困惑或難以理解的一件事是使用方括號()。 誰能告訴我所有功能的作用?
all :: (a -> Bool) -> [a] -> Bool
all p xs = and [ p x | x <- xs ]
據我了解,函數的類型顯示類型約束,輸入和輸出。 不會有
all :: [a] -> Bool
足夠?
Haskell中的括號的用途與大多數其他編程語言非常相似:更改運算和/或分組術語的優先級。
在您的情況下, (a -> Bool)
括在括號中的事實表明該函數的第一個參數的類型為a -> Bool
。 如果沒有括號(即簽名all :: a -> Bool -> [a] -> Bool
),則含義是該函數的第一個參數的類型為a
,而該函數的第一個參數的類型為第二個參數是Bool
。
all :: [a] -> Bool
還不夠嗎? 如果那是簽名,那么問題將是:這種功能是什么意思? 列表不為空時是否返回True
? 還是空的時候? 或者當它僅包含42個元素時? 函數的壞名字。 應該將其命名為has42Elements
而不是all
。
另一方面,如果該函數采用類型a -> Bool
的第一個參數(即,采用a
並返回Bool
的函數),則all
函數的含義將是“ 檢查該函數是否對所有函數均為True
此列表中的元素 ”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.