2017-08-27 144 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

相關問題