J'utilise un newtype comme champ d'un enregistrement, et la correspondance de motif sur le type « parent » pour extraire la valeur imbriquée est lourd:Comment déconstruire proprement les nouveaux types imbriqués dans des enregistrements?
newtype CityName = CityName String
newtype City = City {
name :: CityName
}
instance showCity :: Show City where
show (City { name }) = case name of (CityName cn) -> "City(" <> cn <> ")"
je peux déconstruire le type « parent », mais je utilisez un autre modèle correspondant pour extraire la chaîne encapsulée - même si le newtype n'a qu'un seul constructeur de données. Il serait plus pratique de déconstruire tout le type en un seul motif.
Est-ce possible? Si oui, je ne peux pas obtenir la syntaxe correcte. J'ai essayé quelque chose comme show (City { name :: (CityName cn) }) = cn
mais cela me donne des erreurs de syntaxe. PureScript by Example ne m'a pas aidé non plus, mais peut-être qu'il y a une façon plus simple de faire ce que je veux?
Merci, bonne explication. Cette syntaxe est-elle documentée quelque part, ou est-ce la même chose que dans Haskell? Je me demande s'il y a plus de «trucs» de déconstruction que je ne connais pas. – stholzm
Il existe un guide linguistique sur le wiki Github ici: https://github.com/purescript/purescript/wiki/Language-Guide#record-patterns. C'est probablement aussi couvert dans le livre de PureScript, mais ce n'est pas vraiment une référence donc peut-être pas l'endroit le plus facile de chercher ce genre de chose! –