2012-10-04 24 views
11

Dies ist die Definition für einen neuen Datentyp:In Haskell, was bedeutet: +: in Datentypdefinition bedeuten?

data Total a = Total a :+: Total a 
       |... 

Was bedeutet: +: Mittelwert in dieser Art Definition?

+0

Es ist nicht gültig in Standard Haskell. Es ist eine seltsame GHC Erweiterung :) – singpolyma

+0

@singpolyma: Es ist Standard [Haskell 98 Syntax] (http://www.haskell.org/onlinereport/syntax-iso.html) (siehe _consym_ Produktion). Schließlich ist der ':' - Konstruktor für Listen nur ein Sonderfall. Vielleicht haben Sie an 'TypeOperators' gedacht? – hammar

+0

@hammar Oh, hmm, ich dachte an 'TypeOperators'. Mir war nicht bewusst, dass die Verwendung von Operatoren für Datenkonstruktoren Standard war. Es ist sehr hässlich. Normalerweise sind hässliche Dinge Erweiterungen :) – singpolyma

Antwort

9

Es ist ein Datenkonstruktor in Infix-Form geschrieben. Sie können einen Operator als Konstruktor haben, wenn er mit : beginnt.

+5

Um es kurz zu machen, ist ':' ein Großbuchstaben-Symbol: D –

+0

Warum gibt es ein: nach +? – Sam

+0

Beachten Sie, dass ab GHC 7.6 die Erweiterung "TypeOperators" jetzt alle Infix-Operatoren als "Großbuchstaben" behandelt. (Das bricht bestehenden Code, der Infix-Operatoren als Typvariablen verwendet ...) –