Ich verstehe nicht, warum die folgende Übung „Werke“ in Haskell Programmierung von First Principles:Teil Anwendung von Daten Konstruktor
type Subject = String
type Verb = String
type Object = String
data Sentence =
Sentence Subject Verb Object
deriving (Eq, Show)
s1 = Sentence "dogs" "drool"
s2 = Sentence "Julie" "loves" "dogs"
Laden der in GHCI zeigt, dass es ganz gut typechecks, aber warum ist dass die Definition von s1
überhaupt Sinn macht? Ich bin immer noch sehr neu in Haskell, also zuerst dachte ich, das war, weil Haskell in s1
implizit ließ die Object
Zeichenfolge leer sein. Aber dann ...
*Main> s1
<interactive>:13:1:
No instance for (Show (Object -> Sentence))
arising from a use of `print'
Possible fix:
add an instance declaration for (Show (Object -> Sentence))
In a stmt of an interactive GHCi command: print it
Ich lerne immer noch, wie diese Fehlermeldungen richtig zu interpretieren, also bitte bitte mit mir. Aber kann jemand erklären, was No instance for (Show (Object -> Sentence))
bedeutet? Genauer gesagt, wie funktioniert das Auslassen der Object
Zeichenfolge in s1
in dieser (Object -> Sentence)
Sache?
Ich bin sicher, das ist dumm einfach, aber ich glaube nicht, das Buch mir dies durch diesen Punkt zu verstehen, ausgestattet hat ...
Look up Funktion currying und im Kopf behalten: Wenn Sie explizit wollen die Unterscheidung zwischen Subjekten und Objekten sehen, können Sie
Object
auf einen Typ mit einem Datentyp KonstruktorMkObject
konvertieren Datenkonstruktoren wie 'Sentence' werden ähnlich behandelt wie reguläre Funktionen. – Alec