verwende ich eine newtype als Feld eines Datensatzes, und Mustervergleich auf dem „Eltern“ Typ der verschachtelte Wert ist umständlich zu extrahieren:Wie dekonstruieren Sie neu in Akten verschachtelte Typen?
newtype CityName = CityName String
newtype City = City {
name :: CityName
}
instance showCity :: Show City where
show (City { name }) = case name of (CityName cn) -> "City(" <> cn <> ")"
I die „übergeordnete“ Typ deconstruct kann, aber dann I Verwenden Sie einen anderen Mustervergleich, um den umschlossenen String zu extrahieren - auch wenn der newtype nur einen Datenkonstruktor hat. Es wäre bequemer, den ganzen Typ in nur einem Muster zu dekonstruieren.
Ist das möglich? Wenn ja, kann ich die Syntax nicht richtig machen. Ich habe versucht, etwas wie show (City { name :: (CityName cn) }) = cn
, aber es gibt mir Syntaxfehler. PureScript by Example hat mir auch nicht geholfen, aber vielleicht gibt es eine bessere Möglichkeit zu tun, was ich will?
Danke, tolle Erklärung. Ist diese Syntax irgendwo dokumentiert oder ist es genau so wie in Haskell? Ich frage mich, ob es mehr Dekonstruktions- "Tricks" gibt, von denen ich nichts weiß. – stholzm
Hier gibt es einen Sprachführer zum Github Wiki: https://github.com/purescript/purescript/wiki/Language-Guide#record-patterns. Es ist wahrscheinlich auch im PureScript-Buch enthalten, aber das ist nicht wirklich eine Referenz, also vielleicht nicht der einfachste Ort, um nach solchen Dingen zu suchen! –