2017-08-27 145 views
7

前不久我发现了Natural数据类型base。当你打算使用非负整数类型时,它应该被采用(就我看来)。但这并不完全清楚,为什么我应该更喜欢NaturalInteger。两种类型都具有任意精度,都具有相当优化的运行时表示 - Integer representationNatural representation。但是当你减去自然数时,这不会真的为你的代码增加更多的类型安全。而Integer在所有软件包中更受欢迎。何时在Haskell中选择'Integer'中的'Natural'?

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

+1

这可能有点自以为是,但我的标准是“如果你更喜欢运行时错误的负面结果,选择'自然'” – chi

+0

@chi同意。虽然我们在'Num'类型类中有'negate'和'( - )',所以我们可以做到不允许减法。 – Shersh

回答

4

我不明白你为什么要使用NaturalInteger。为什么不使用Rational代替?它是任意精度,具有优化的运行时表示,适用于自然,整数,有理数!

我的观点是我们应该选择一种在语义上有意义的类型。让我们把街道上的房屋和自然景色相结合,用整数记录下我们的下一场高尔夫比赛,然后把新鲜的蓝莓馅饼与理性分开。

+0

我不知道这是什么部分(如果有的话)是讽刺意味的。我认为你应该更好地写清楚你的意见是什么。 – leftaroundabout

+0

@leftaroundabout我鼓励你用不同的修辞风格添加第二个答案。 – erisco

+0

@erisco由于语义意义选择“自然”的原因是一个很好的理由。但那么:为什么不'newtype Natural = Natural Integer'?由于不断调用'gcd'函数,'Rational'比'Integer'或'Natural'慢得多。但不清楚哪一个 - Natural或Integer是因为编译器优化和内联以及所有这些东西而变慢。我的问题不仅仅是“呃,我有两种类型,呃......我该用什么?我很愚蠢,我不能选择»。但是为什么用这样的语义创建这样的'Natural'类型。为什么例外而非饱和?我可以获得什么好处? – Shersh

相关问题