sig
  type lname = LName of string
  module RowLabel :
    sig
      type t
      val compare : CoreAlgebra.RowLabel.t -> CoreAlgebra.RowLabel.t -> int
      val export : CoreAlgebra.RowLabel.t -> CoreAlgebra.lname
      val import : CoreAlgebra.lname -> CoreAlgebra.RowLabel.t
    end
  type 'a term =
      RowCons of CoreAlgebra.RowLabel.t * 'a * 'a
    | RowUniform of 'a
    | App of 'a * 'a
    | Var of 'a
  type 'a arterm =
      TVariable of 'a
    | TTerm of 'a CoreAlgebra.arterm CoreAlgebra.term
  val iter : ('a -> unit) -> 'a CoreAlgebra.term -> unit
  val map : ('a -> 'b) -> 'a CoreAlgebra.term -> 'b CoreAlgebra.term
  val fold : ('a -> 'b -> 'b) -> 'a CoreAlgebra.term -> 'b -> 'b
  val fold2 :
    ('a -> 'b -> 'c -> 'c) ->
    'a CoreAlgebra.term -> 'b CoreAlgebra.term -> 'c -> 'c
  val change_arterm_vars :
    ('a * 'a) list -> 'a CoreAlgebra.arterm -> 'a CoreAlgebra.arterm
  val app :
    'a CoreAlgebra.arterm ->
    'a CoreAlgebra.arterm list -> 'a CoreAlgebra.arterm
  val uniform : 'a CoreAlgebra.arterm -> 'a CoreAlgebra.arterm
  val rowcons :
    CoreAlgebra.lname ->
    'a CoreAlgebra.arterm -> 'a CoreAlgebra.arterm -> 'a CoreAlgebra.arterm
  val n_rowcons :
    (CoreAlgebra.lname * 'a CoreAlgebra.arterm) list ->
    'a CoreAlgebra.arterm -> 'a CoreAlgebra.arterm
end