簡體   English   中英

理解在Haskell的all函數中使用括號嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM