Haskell の表示セマンティクスに関するこの記事によると、Int から Int への非正格 (非最下位保存) 関数は 1 つだけです。
引用する:
Integer -> Integer 型の厳密ではない関数のプロトタイプが 1 つしかない場合があります。
1 x = 1
そのバリアントは、具体的な数値 k ごとに constk x = k です。なぜこれらだけが可能なのですか?1 つの n は1 つの ⊥ よりも少なく定義できないことに注意してください。Integer はフラットなドメインであるため、両方が等しくなければなりません。
本質的に、その型シグネチャの唯一の非正格関数は定数関数のみであると言います。私はこの議論には従いません。また、フラットなドメインが何を意味するのかよくわかりません。この記事の残りの部分では、値のポーズセットにノードが 1 つしかないことを単に意味していると信じるようになります。
A->A、または A->B からの関数で同様のことが起こりますか? つまり、それらは定数関数でなければなりませんか?