J'essaie de développer un module qui effectue différents algorithmes sur un ensemble d'états en recevant les fonctions pour les gérer en tant que paramètres. Je définissais différents alias de type pour le rendre plus facile à implémenter; un exemple simple pour comprendre ce serait:Haskell Type Classes dans la déclaration Type Alias
-- Function that expands a state
type Expand = State -> State
-- Function that evaluates a state
type Eval = State -> Float
-- Group of states
type Tree = [State]
Et puis j'ai réalisé que je voulais State
être l'alias d'un type qui est assimilables: Je ne me soucie pas si les états de l'utilisateur sont (Int, Int)
, Float
, ou String
tant qu'il lui est possible de mettre en œuvre les fonctions Expand
et Eval
et de comparer deux états différents.
Comment puis-je généraliser le type State
pour y parvenir? La chose intuitive qui vient à l'esprit est quelque chose comme type State = (Eq a) => a
mais ce n'est évidemment pas possible sans un a
dans la portée. Y at-il un moyen facile pour moi de déclarer des fonctions qui traitent State
comme une boîte noire?