J'ai une fonction "enumerate" écrite dans le langage de terme Coq (comment s'appelle-t-elle?). Cette fonction est un peu ennuyante à utiliser car elle nécessite que A
(le type d'un élément de la liste l
) soit explicitement fourni chaque fois que la fonction enumerate
est utilisée. Y at-il un moyen d'éviter de devoir passer explicitement A
en tant que paramètre?Coq fonction polymorphique sans type explicite
(* [a, b] -> [(0,a), (1,b)] *)
Fixpoint enumerate (A : Type) (l : list A) : list (nat * A) :=
let empty : (list (nat * A)) := nil in
let incr_pair xy := match xy with
| (x, y) => ((S x), y)
end in
match l with
| nil => empty
| (x :: xs) => (O, x) :: (map incr_pair (enumerate A xs))
end.
Je veux être capable d'écrire quelque chose comme
Fixpoint enumerate (l : list A) : list (nat * A) := ...
Peut-être avec une syntaxe d'identifier ce A
exactement supplémentaire est.
La langue du terme Coq est appelée Gallina. – eponier