sig
  type 'a func = {
    func_call : 'a;
    func_name : string;
    func_arg : ODN.t option;
  }
  val func : 'a -> string -> 'a ODNFunc.func
  val func_with_arg :
    ('a -> 'b) -> string -> 'a -> ('a -> ODN.t) -> 'b ODNFunc.func
  val odn_of_func : 'a ODNFunc.func -> ODN.t
  val func_call : 'a ODNFunc.func -> 'a
end