引数なしのHaskell関数の型宣言をどのように記述しますか? 質問する

引数なしのHaskell関数の型宣言をどのように記述しますか? 質問する

引数なしの 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' () 、計算は新たに行われていたでしょう。

おすすめ記事