Definition Vector (n : nat) : Traversal.
exists (fun a => Vector.t a n) (@traverseVector n).
apply traverseVector_free_applicative.
apply traverseVector_identity.
apply traverseVector_compose.
Defined.
Section Traversal.
Definition impure a b (x : a) : KleeneStore a b b :=
kleeneStore (fun v => Vector.hd v) (Vector.cons _ x _ (Vector.nil _)).

(* Specifications: *)
Lemma research_impure (F:Applicative) a b (h : a -> F b) (x : a) :
research h (impure b x) = h x.