Je travaillais sur un petit remaniement qui consistait à convertir une partie d'un type de données à partir d'un fichier Int
dans un wrapper de type nouveau. Avant :
data Account = Account {
accountId :: Int
} deriving (Eq, Show)
Après :
newtype AccountId = AccountId Int deriving (Eq, Ord, Read, Show)
data Account = Account {
accountId :: AccountId
} deriving (Eq, Show)
Dans une autre partie du programme, je fais passer accountId
dans une fonction d'une bibliothèque tierce dans le but de filtrer les résultats qu'elle renvoie. Cependant, les filtres attendent Text
et de convertir accountId
pour cela, j'ai utilisé ce qui suit :
Text.pack $ show $ accountId someAccount
Il en résulte que des résultats erronés sont renvoyés au moment de l'exécution après le remaniement, en raison de la différence entre les paramètres suivants Show
instances ( "123"
vs "AccountId 123"
).
Existe-t-il un moyen, soit en utilisant le système de type, soit en utilisant une autre méthode pour convertir en Text
qui permettrait de détecter ce problème au moment de la compilation ? Une solution qui me vient à l'esprit serait de définir une fonction d'aide qui prendrait le résultat de accountId someAccount
et le convertit en Text
mais peut-être existe-t-il une option/un modèle différent/meilleur dont je ne suis pas au courant.