La différence majeure étant la garantie à la compilation que les champs comparés existent.
Et bien plus encore, car le Property enveloppant une fonction, on peut effectuer des traitements sur les champs avant de les comparer, encore une fois, avec la garantie sur les types.
Si je vais à l'essentiel du fonctionnement de la méthode expliquée, j'ai besoin que de 2 lignes:
data Property a = forall p. Ord p => Prop (a -> p)
compareProps ps a b = mconcat $ map (\(Prop p) -> comparing p a b) p
Pour illustrer les traitements possible, field2 est une liste d'entier dont on comparera la somme plutôt que les éléments, field3 est une chaîne de caractères qu'on comparera en négligeant la case:
compareProps [Prop field1, Prop (sum . field2), Prop (map toLower . field3)] a b
[^] # Re: typage mou
Posté par MsieurHappy . En réponse à la dépêche Quelques nouvelles de Go, le langage de programmation. Évalué à 1.
Et bien plus encore, car le Property enveloppant une fonction, on peut effectuer des traitements sur les champs avant de les comparer, encore une fois, avec la garantie sur les types.
Si je vais à l'essentiel du fonctionnement de la méthode expliquée, j'ai besoin que de 2 lignes:
data Property a = forall p. Ord p => Prop (a -> p)
compareProps ps a b = mconcat $ map (\(Prop p) -> comparing p a b) p
Pour illustrer les traitements possible, field2 est une liste d'entier dont on comparera la somme plutôt que les éléments, field3 est une chaîne de caractères qu'on comparera en négligeant la case:
compareProps [Prop field1, Prop (sum . field2), Prop (map toLower . field3)] a b