Natural
或者 Integer
。为什么不用Rational
呢?它是任意精度的,拥有优化的运行表示,并且适用于自然数、整数,以及有理数!Natural
的原因是语义感觉是一个很好的理由。但是,为什么不使用newtype Natural = Natural Integer
呢?Rational
比Integer
或Natural
慢得多,因为需要不断调用gcd
函数。但是不清楚哪个——Natural
还是Integer
——由于编译器优化和内联等所有东西而变慢。我的问题不仅仅是“我有两种类型,嗯...我应该使用哪个?我太蠢了,我不能选择”。而是为什么要创建这样的具有这种语义的Natural
类型。为什么要使用异常而不是饱和?我可以获得什么好处? - Shersh:t length
显示其结果类型为Int
而非Natural
,如果你自己想坚持语义上合理的选择,这可能很烦人。length
的类型设计背后的动机是什么? - wstomv
Natural
”。 - chiNum
类型类中有negate
和(-)
,但我们无法阻止减法的发生。 - Shersh