Wer weiß, was ist der Sinn des ‚:>‘ Konstruktor in den folgenden Code:Haskell Daten:> Konstruktor Bedeutung
data Rose a = a :> [Rose a]
deriving (Eq, Show)
Wer weiß, was ist der Sinn des ‚:>‘ Konstruktor in den folgenden Code:Haskell Daten:> Konstruktor Bedeutung
data Rose a = a :> [Rose a]
deriving (Eq, Show)
In Haskell die Funktionen, deren Name besteht aus alphanumerischen Zeichen sind Präfix standardmäßig und Die Funktionen, die aus Zeichen wie +
, >
, $
usw. bestehen, sind standardmäßig Infix. Zum Beispiel können Sie eine Infix Funktion wie
Prelude> let a $%^ b = a + b
Prelude> :t ($%^)
($%^) :: Num a => a -> a -> a
Gleiches gilt für Konstrukteure definieren (bearbeiten: als @ChrisTaylor richtig bemerkt, mit der Einschränkung, dass der Name eines Infix Konstruktor muss mit :
starten). Die Linie
Prelude> data Rose a = a :> [Rose a]
Bedeutet, dass :>
ein Konstruktor ist, die zwei Argumente nimmt:
Prelude> :t (:>)
(:>) :: a -> [Rose a] -> Rose a
Sie könnten auch schaffen eine normal aussehende Konstruktor als
data Rose a = RoseCtr a [Rose a]
, die die gleiche hätte Art. In einigen Fällen sind Infix-Funktionen/Konstruktoren intuitiver und machen den Code verständlicher.
Sie sollten hinzufügen, dass Infix-Typ-Konstruktoren mit beginnen müssen: und dass Sie das Pragma der TypeOperators-Sprache benötigen. –
@ChrisTaylor: Danke, Sie haben recht mit dem Doppelpunkt, aber sind Sie sich sicher über das Pragma? GHC 7.6.3 scheint dies nicht zu erfordern. – fjarri
Danke für die Erklärung! Aber ich verstehe nicht, was der Operator:> tut? Ist es ein spezieller Operator oder ein spezieller Operator, könnte ich genauso gut setzen:? (Was macht der Operator?) –
Skyfe