2014-09-05 102 views
6

紅寶石?允許在標識符的末尾允許像相當於紅寶石...?在haskell

if do_something? do_something

它允許區分功能reture bool從功能做某事。

在Haskell中,顯然類型簽名告訴你這兩個函數之間的區別,但是有沒有名稱約定或命名模式來命名布爾或選項?

在我的情況下,我想根據選項的值(作爲參數傳遞)生成(或不)一些標籤。

明顯的代碼將

generate options = do 
    when (generateLabels? options) generateLabels 

generateLabels?是無效的名字,我該怎麼稱呼呢?

+6

我不明白這個問題如何被回答,而不是自以爲是。我不知道一個約定,但我可以將它命名爲'labelsAreNeeded :: Options - > Bool'。然後它會像英文句子「當需要標籤給出選項,生成標籤」一樣閱讀。 – bheklilr 2014-09-05 16:53:25

+0

不,不是。除了給出這樣的函數名稱的明顯慣例外,它們聽起來像是代表真實的東西。 – Cubic 2014-09-05 17:05:43

+0

@bheklilr:確實有點自以爲是,但共享美可以有一個通用的慣例。但是,我喜歡你的答案,即使它不能作爲一般模式工作(如''') – mb14 2014-09-05 17:08:15

回答

6

如果您瀏覽函數that return Bool,您會注意到約定是使用謂詞,當在代碼讀取中使用謂詞時,就像句子一樣。例如:

isDenormalized :: RealFloat a => a -> Bool 
isSigned :: Bits a => a -> Bool 
isAlphaNum :: Char -> Bool 

在你的功能,我建議您重命名generateLables?喜歡的東西作爲needsLabels在@bheklilr爲了使你的代碼更易讀指出。

+1

我想指出,這個規則有例外,即'even','odd','' null和其他一些,但是在大多數'base'外的庫中,在函數名中使用一些動詞的慣例是相當普遍的。 – bheklilr 2014-09-05 18:02:12

+0

我通常使用'是...'patttern,但找不到與我的情況相對應的任何內容。 'needsLabels'正是我所需要的。 – mb14 2014-09-05 18:46:28