Module types are dependent records

module type EQ = sig
  type t
  val eq : t -> t -> bool
end

module type MONAD = sig
  type 'a t
  val pure : 'a -> 'a t
  val bind : 'a t -> ('a -> 'b t) -> 'b t
end