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 'CoreAlgebra.arterm CoreAlgebra.term
  val iter : ('-> unit) -> 'CoreAlgebra.term -> unit
  val map : ('-> 'b) -> 'CoreAlgebra.term -> 'CoreAlgebra.term
  val fold : ('-> '-> 'b) -> 'CoreAlgebra.term -> '-> 'b
  val fold2 :
    ('-> '-> '-> 'c) ->
    'CoreAlgebra.term -> 'CoreAlgebra.term -> '-> 'c
  val change_arterm_vars :
    ('a * 'a) list -> 'CoreAlgebra.arterm -> 'CoreAlgebra.arterm
  val app :
    'CoreAlgebra.arterm ->
    'CoreAlgebra.arterm list -> 'CoreAlgebra.arterm
  val uniform : 'CoreAlgebra.arterm -> 'CoreAlgebra.arterm
  val rowcons :
    CoreAlgebra.lname ->
    'CoreAlgebra.arterm -> 'CoreAlgebra.arterm -> 'CoreAlgebra.arterm
  val n_rowcons :
    (CoreAlgebra.lname * 'CoreAlgebra.arterm) list ->
    'CoreAlgebra.arterm -> 'CoreAlgebra.arterm
end