2017-08-27 3 views
7

Vor nicht langer Zeit habe ich Natural Datentyp in base entdeckt. Es soll genommen werden (wie es mir scheint), wenn Sie beabsichtigen, nicht-negativen Integer-Typ zu verwenden. Aber es ist nicht genau klar, warum sollte ich Natural zu Integer bevorzugen. Beide Typen haben eine beliebige Genauigkeit, beide haben eine optimierte Laufzeitdarstellung - Integer representation und Natural representation. Aber Naturalcan throw pure exceptions wenn Sie natürliche Zahlen subtrahieren und das fügt Ihrem Code nicht wirklich mehr Typsicherheit hinzu. Während Integer ist über alle Pakete beliebter.Wann wählen Sie "Natural" über "Integer" in Haskell?

Also wann und warum sollte ich Natural verwenden?

+1

Dies könnte ein bisschen eigensinnig sein, aber mein Kriterium wäre "Wenn Sie einen Laufzeitfehler zu einem negativen Ergebnis bevorzugen, wählen Sie" Natural " – chi

+0

@chi Agree. Während wir 'negate' und' (-) 'innerhalb' Num' Klasse haben, können wir nicht viel tun, um Subtraktionen zu vermeiden. – Shersh

Antwort

4

Ich sehe nicht, warum Sie Natural oder Integer verwenden möchten. Warum nicht stattdessen Rational verwenden? Es ist eine beliebige Genauigkeit, hat eine optimierte Laufzeitdarstellung und funktioniert für Naturals, Ganzzahlen, und Rationals!

Mein Punkt ist, dass wir einen Typ wählen sollten, der semantisch sinnvoll ist. Lasst uns die Häuser auf der Straße mit Naturalien zählen, unser nächstes Golfspiel mit ganzen Zahlen aufzeichnen und einen frischen Blaubeerkuchen mit rationalen teilen.

+0

Ich weiß nicht, welche Teile (wenn überhaupt) davon sarkastisch gemeint sind. Ich denke, du solltest besser schreiben, was deine Meinung ist. – leftaroundabout

+0

@leftaroundabout Ich ermutige Sie, eine zweite Antwort in einem anderen rhetorischen Stil hinzuzufügen. – erisco

+0

@erisco Der Grund, 'Natural' wegen semantischem Sinn zu wählen, ist ein guter Grund. Aber dann: warum nicht 'newtype Natural = Natural Integer'? 'Rational' ist viel langsamer als' Integer' oder 'Natural', da die Funktion' gcd' ständig aufgerufen wird. Aber es ist nicht klar, was man - "Natural" oder "Integer" - wegen Compiler-Optimierungen und Inlining und all dem Zeug langsamer macht. Meine Frage ist nicht nur «duh, ich habe zwei Typen, emm ... was soll ich benutzen? Ich bin so dumm, ich kann nicht wählen ». Warum aber einen solchen 'Natural'-Typ mit solcher Semantik erzeugen. Warum Ausnahme statt Sättigung? Welche Vorteile kann ich gewinnen? – Shersh

Verwandte Themen