let pp_map pp_key pp_val ppf m =
    let l = M.fold (fun k v l -> (k,v)::l) m [] in
      Format.fprintf ppf "@[%a@]"
        (Pp.lst "@\n"
           (fun ppf (k,v) -> 
              Format.fprintf ppf "@[<2>%a@ |->@ %a@]"
                pp_key k
                pp_val v))
        (List.rev l)