引数なしの Haskell 関数の型宣言をどのように記述しますか?
ベストアンサー1
引数のない関数というものは存在しません。それは単なる値です。もちろん、次のような宣言を書くことはできます。
five :: Int
five = 5
私が作ったら、あなたの要望にもっと近いものになるかもしれません
five' :: () -> Int
five' () = 5
しかし、これは完全に同等であり( のようなばかげたことを書かない限りfive' undefined
)、余計なものです1。
もしあなたが言っているのがC言語で
void scream() {
printf("Aaaah!\n");
}
それは関数ではなくアクションです。(Cプログラマーは関数と呼びますが、手順(誰でも理解できると思います。)上で述べたことはほぼ同じです。
scream :: IO()
scream = putStrLn "Aaaah!"
この場合の空の()
doは引数がないということとは関係がなく(これは->
矢印がないことからもわかる)、代わりに引数がないことを意味することに注意されたい。戻り値、それは単なる「副作用のみ」のアクションです。
1 実際には、1つの点で異なっています
five
。
定数適用形
、つまりこれはメモ化されているということです。もし私がそのような定数を回りくどい方法 (例えば
sum $ 5 : replicate 1000000 0
) で定義していたら、たとえ がプログラム実行中に複数回評価されたとしても、長い計算は 1 回しか実行されません
five
。一方、 と書いたところでは
five' ()
、計算は新たに行われていたでしょう。