Was bedeutet () in Haskell

8

In einigen Haskell Code stieß ich auf:

%Vor%

Was bedeutet () hier?

Ich würde eine Suchmaschine verwenden, aber ich finde keine, die () richtig handhabt.

    
Wysaard 13.10.2015, 20:54
quelle

4 Antworten

13

Wenn nicht für die seltsame Spezialsyntax, könnte es als

definiert werden %Vor%

Es geht um den langweiligsten Typ, den es gibt. Die Syntax soll dich an Tupel denken lassen: (a,b) ist ein Paar, (a,b,c) ist ein Tripel usw. und () ist ein 0-Tupel. Das einzige, was fehlt, ist ein 1-Tupel, das diese Syntax nicht haben kann, weil es mit der üblichen Verwendung von Klammern kollidieren würde.

() wird sehr oft als Ergebnis von etwas verwendet, das kein interessantes Ergebnis hat. Zum Beispiel hat eine IO -Aktion, die einige I / O ausführen und beenden soll, ohne ein Ergebnis zu erzeugen, typischerweise den Typ IO () . Es kann auch verwendet werden, wenn Sie uninteressante Eingaben benötigen. GHC hat dafür eine spezielle Syntax, aber in Haskell 98 ist die Art, Lisp cond nachzuahmen, wie folgt:

%Vor%

Es ist vollkommen richtig, aber auch sehr langweilig, zu fragen, welchen Wert der Typ () hat; es gibt nur einen legitimen, den du haben könntest.

Vom Standpunkt "Haskell-as-fast-category" ist () ein endgültiges Objekt . Das heißt, für jeden Typ X gibt es genau eine legitime Funktion vom Typ X -> () , nämlich const () . Aus der anderen Richtung erwähnt der Schweinehalter Void ein anfängliches Objekt . Für jeden Typ X gibt es genau eine legitime Funktion vom Typ Void -> X , nämlich absurd . Wenn Sie in der Stimmung für kategorisches Denken sind, können Anfangs- und Endobjekte nützlich sein, um herum zu haben.

    
dfeuer 13.10.2015, 21:19
quelle
28

() bedeutet "langweilig". Es bedeutet den langweiligen Typ, der eine Sache enthält, auch langweilig. Es ist nichts Interessantes zu gewinnen, wenn man ein Element des langweiligen Typs mit einem anderen vergleicht, weil man nichts über ein Element des langweiligen Typs lernen kann, wenn man es auf sich aufmerksam macht.

Es ist sehr verschieden von dem leeren Typ, der von Haskell Void (von Leuten, die ich wünschte, ich hätte einen besseren Namen wie den von mir vorgeschlagenen gewählt) gewählt hat. Der leere Typ ist sehr aufregend, denn wenn dir jemand jemals einen Wert gibt, weißt du, dass du bereits tot und im Himmel bist und dass alles, was du willst, dein ist.

Aber wenn dir jemand einen Wert in () gibt, reg dich nicht auf. Einfach wegwerfen.

Manchmal macht es Spaß, Typenkonstruktoren zu nehmen, die durch einen "Elementtyp" parametrisiert sind, und den Parameter mit () einzufügen. Sie können sehen, welche Informationen dem Typkonstruktor inhärent sind und nicht von den Elementen kommen. ZB Maybe () ist eine Version von Bool , mit Just () oder Nothing . Außerdem entspricht [()] den (möglicherweise unendlichen) natürlichen Zahlen: die einzige Information, die Sie haben, ist eine Länge.

Also, () bedeutet "langweilig", aber es ist oft ein Hinweis darauf, dass irgendwo anders etwas Interessantes passiert.

    
pigworker 14.10.2015 02:19
quelle
4

Es gibt ausgezeichnete Suchmaschinen, die auf Haskell spezialisiert sind.

Ссылка gibt Ihnen sofort die richtige Antwort:

  

Data ()   
ghc-prim -GHC.Tuple

  Der Unit-Datentyp () hat ein nicht-undefiniertes Member, den Null-Konstruktor () .
    
leftaroundabout 13.10.2015 21:59
quelle
3

Es wird "Einheitentyp" genannt. Sie können sich das als Haskell-Äquivalent von void in einigen Punkten vorstellen. Es ist ein Typ, der nur einen Wert hat (auch () ).

    
mipadi 13.10.2015 20:57
quelle

Tags und Links