2017-10-25 11 views
0

Ich versuche, dieses Lehrbuch-Beispiel zu laufen, aber ich erhalte immer diese Fehlermeldung:
Typ konnte nicht ‚Integer -> t‘ erwartet übereinstimmen mit den tatsächlichen Typ

* Couldn't match expected type `Integer -> t' 
       with actual type `[Char]' 
* The function `showPerson' is applied to two arguments, 
    but its type `People -> [Char]' has only one 
    In the expression: showPerson "charles" 18 
    In an equation for `it': it = showPerson "charles" 18 
* Relevant bindings include it :: t (bound at <interactive>:38:1) 

Ich verstehe nicht, warum ich Ich bekomme diesen Fehler. Ich gebe die richtigen Typen ein.
Mein Code ist:

type Name = String 
type Age = Int 
data People = Person Name Age 

showPerson :: People -> String 
showPerson (Person a b) = a ++ " -- " ++ show b 

Antwort

3

Ihre showPerson Funktion, wie erklärt, hat nur ein Argument. Dieses Argument ist vom Typ People.

Nach dem Fehler, den Sie angeben, versuchen Sie jedoch, diese Funktion mit zwei Argumenten aufzurufen: "charles" und 18. Das erste Argument ist vom Typ String, das zweite - vom Typ Int.

Dies ist, was der Compiler versucht, Ihnen zu sagen, wenn es sagt:

The function `showPerson' is applied to two arguments, 
but its type `People -> [Char]' has only one 

die korrekte Schreibweise Ihrer Funktion aufzurufen, müssen Sie zuerst einen Wert von People Typ erstellen, übergeben Sie dann diesen Wert in der Funktion als Argument:

p = Person "charles" 18 
showPerson p 

Oder dasselbe in einer Zeile:

showPerson (Person "charles" 18) 
+0

jetzt verstehen! Vielen Dank! –

Verwandte Themen