functor (T : TermInner.S->
  sig
    type subst = (T.t, T.t) Var.Subst.t
    val whnf : ?subst:Reduce.Make.subst -> T.t -> T.t
    val snf : ?subst:Reduce.Make.subst -> T.t -> T.t
    val app_whnf : ?subst:Reduce.Make.subst -> T.t -> T.t list -> T.t
    val eta_reduce : T.t -> T.t
    module Full :
      sig
        val whnf :
          ?subst:Reduce.Make.subst ->
          T.t ->
          T.t list ->
          T.t * T.t list * Reduce.Make.subst * T.t TermInner.Builtin.guard
      end
  end