簡體   English   中英

如何編寫沒有參數的Haskell函數的類型聲明?

[英]How to write the type declaration of an Haskell function with no arguments?

如何在沒有參數的情況下編寫haskell函數的類型聲明?

沒有參數的函數就沒有,這只是一個值。 當然,你可以寫下這樣的聲明:

five :: Int
five = 5

如果我做的話,它可能看起來更像你要求的東西

five' :: () -> Int
five' () = 5

但這完全等同(除非你寫了一些荒謬的東西,如five' undefined )和超流1

如果你的意思是類似的,在C中

void scream() {
  printf("Aaaah!\n");
}

然后,這又不是一個功能,而是一個動作。 (C程序員確實稱它為函數,但你最好說程序 ,每個人都會理解。)我上面說的幾乎一樣,你用的

scream :: IO()
scream = putStrLn "Aaaah!"

請注意,在這種情況下,empty ()與沒有參數(由於缺少->箭頭已經存在)沒有任何關系,相反,它意味着也沒有返回值 ,它只是一個“副作用 -只有“行動。


1實際上,它有一個相關的不同之處: five是一種不變的應用形式 ,這意味着它的備忘錄。 如果我在一些迂回的方式限定的這樣的常數(例如sum $ 5 : replicate 1000000 0 ),那么冗長的計算將只進行一次,即使five是在程序運行中多次評估。 OTOH,無論你在哪里寫出five' () ,計算都會重新完成。

由於Haskell中的函數是純的(它們的結果僅取決於它們的參數),所以沒有參數的函數的等價物只是一個值。 例如, one = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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