Haskellはラムダ計算のために多くの言語よりも数学的ですが、ドメインの数は不完全だと思います。たとえば、とはInteger
ありますが、または、またはドメインとしてはありません。これにより、コンパイラが型エラーをキャッチできたとしても、関数が安全でなくなることがあります。例:modは実行時にのみ
出力します。しかし、私たちは次のようなものを持つことができます; ガード、インターバル、または別のデータ型のようなもの...ゲームでは、キャラクターの寿命が正の数になるようにします。または、0から100まで、下ではなく、上ではありません。彼が殴られたとき、私は醜いものを呼ぶ必要があります。Cでさえ持っています。Float
Positive
Negative
[1..5]
5
0
*** Exception: divide by zero
mod :: Integral a => a -> a -> a
mod :: Integral a, a != 0 => a -> a -> a
positive x = if x > 0 then x else 0
signed
unsigned
それは弱点ですか、それとも「間隔」ドメインがない理由ですか?これを修正するパッケージはありますか?