Section MonadFunctor. (* Every Monad is a Functor. *)
Variable M: Monad.
Definition bind_map (a b: Set) (f: a -> b) (x: M a): M b :=
xv <- x ;
ret (f xv).
Hypothesis f_ext_eq: forall A B (f g: A -> B), (forall x, f x = g x) -> f = g.

(* Specifications: *)
Lemma eta A B (f: A -> B): (fun x => f x) = f.
intros.