2017-10-13 1 views
0

Die Signatur für diese Funktion verwirrte mich und alle Informationen online verwirren mich. Kann mir jemand die Signatur der Funktion erklären und mir vielleicht ein Beispiel geben?Kann jemand die Signatur für diese Haskell-Funktion im Detail erklären?

sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a] 
sort3 cmp xs | length(xs) < 1 = xs 

Dies ist der Fehler, den ich bekomme.

Couldn't match expected type ‘a -> a -> Ordering’ 

with actual type ‘[t0]’ 

• In the first argument of ‘sort3’, namely ‘[]’ 
    In the expression: sort3 [] 
    In an equation for ‘it’: it = sort3 [] 
• Relevant bindings include 
    it :: [a] -> [a] (bound at <interactive>:2:1) 

Antwort

2

Es gibt zwei Argumente für diese Funktion:

sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a] 

Das erste Argument ist selbst ein function die zwei Argumente nimmt: eine bestellbaren Sache und eine bestellbaren Sache (das alles ist, die in der typeclass ist Ord) und es gibt etwas vom Typ Ordering zurück.

Das zweite Argument ist ein list dieser Dinge, von denen alle genau die gleiche bestellbare Sache sind, die das erste Argument (selbst eine Funktion) zwei nehmen würde.

Schließlich gibt die sort3 Funktion eine Liste der gleichen bestellbaren Sache zurück.

Nun wird GHCI Sie sagen, dass es das erste Argument erwartet zu sein, was Ihre Unterschrift sagt es sein sollte (eine Funktion, die sich zwei Argumente nimmt und gibt ein Ordering), aber man gab sie eine leere Liste statt:

Couldn't match expected type ‘a -> a -> Ordering’ 

with actual type ‘[t0]’ 

• In the first argument of ‘sort3’, namely ‘[]’ 
    In the expression: sort3 [] 

mit anderen Worten: „Sie hat mir gesagt, Ihr erstes Argument (a -> a -> Ordering) sein würde, aber stattdessen haben Sie die Funktion wie diese sort3 [] aufgerufen und ich kann nicht [] als Funktion mit dieser Signatur interpretieren. (a -> a -> Ordering)

+0

Oh Okay, ich verstehe, was du sagst. Danke für das Einfache und schnell auf den Punkt antworten – christian

Verwandte Themen