Existe-t-il une extension Haskell permettant la création de constructeurs de données plus complexes que GADT?Existe-t-il un moyen de faire plus de constructeurs de données "dynamiques" dans Haskell?
Supposons que je voulais créer une structure de données est une liste ordonnée, et un constructeur de données similaire à (:)
qui travaillent avec des listes, avec la signature de type:
data MyOrdList a where
(>>>) :: (Ord a) -> a -> MyOrdList a -> MyOrdList a
Mais je veux (>>>)
d'avoir un spécifique comportement, quelque chose comme ceci:
(>>>) :: (Ord a) => a -> [a] -> [a]
x >>> [] = [x]
x >>> xs = low ++ [x] ++ high
where low = filter (<x) xs
high = filter (>x) xs
Ainsi, la structure sera toujours une structure ordonnée. (Je ne sais pas si c'est une bonne pratique, je propose juste l'exemple le plus simple qui m'est arrivé du type de comportement que je veux).
Bien sûr, je peux utiliser une fonction (>>>)
, mais alors je n'aurai pas de correspondance de modèle et d'autres avantages que je l'aurais >>>
était un constructeur de données.
Est-il possible de faire quelque chose comme ça?