何时在Haskell中选择'Natural'而不是'Integer'?

She*_*rsh 8 haskell integer primitive-types integer-arithmetic

不久前我发现了Natural数据类型base.当您打算使用非负整数类型时,它应该被视为(在我看来).但我不清楚为什么我更愿意这样NaturalInteger.两种类型都具有任意精度,两者都具有相当优化的运行时表示 - Integer表示Natural表示.但是当你减去自然数时,Natural 可以抛出纯粹的异常,这并没有真正为你的代码添加更多的类型安全.虽然Integer在所有套餐中更受欢迎.

那么何时以及为什么要使用Natural

eri*_*sco 5

我不明白您为什么要使用NaturalInteger。为什么不使用它Rational呢?它具有任意精度,具有优化的运行时表示形式,并且适用于自然数,整数有理数!

我的观点是,我们应该选择一种在语义上有意义的类型。让我们用自然数来统计街上的房屋,用整数记录下一次高尔夫比赛,并用理性来划分新鲜的蓝莓派。