2013-10-05 8 views

Antwort

22

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.

+2

Sie sollten hinzufügen, dass Infix-Typ-Konstruktoren mit beginnen müssen: und dass Sie das Pragma der TypeOperators-Sprache benötigen. –

+1

@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

+0

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