Bitte helfen Sie mir, die folgende Definition zu verstehen:
%Vor%Warum ist runWriter als
deklariert? %Vor%, wenn der tatsächliche Typ lautet:
%Vor%Nachdem ich mit ghci versucht habe, habe ich festgestellt, dass dies ein implizites Argument sein muss, da Typ "a" bestimmt werden muss, aber was genau passiert hier?
Weil runWriter
ein Datensatzfeld-Accessor auf Writer
ist. Es ist eigentlich fast gleichbedeutend mit
Haskell hat nur Datensätze zu geben
zB
%Vor%Wenn es hilft, denken Sie an es als etwas wie ein "funktioneller Getter" im gröbsten Sinne. Das scheint mit einem Feld nicht besonders wichtig zu sein, Sie können immer Muster zuordnen, aber wenn Sie 5 Felder haben, sind Datensätze + funktionale Updates sehr hilfreich. Siehe LYAH für eine ausführlichere Erklärung.
Eine andere Art, es zu betrachten: Sie können sich vorstellen, 2-Tupel so zu definieren (wenn die spezielle (,)
-Syntax nicht schon eine spezielle eingebaute war)
und dann fst
und snd
würden sich wie normal verhalten:
( newtype
wie in Ihrem Beispiel funktioniert für Typen mit nur einem Wertfeld. Für Typen mit mehreren Feldern wird data
benötigt.)