sig
  type tag_update_info = SurfaceSyntax.tag_update_info
  type field = SurfaceSyntax.field
  type pattern =
      PVar of Variable.name * TypeCore.location
    | PTuple of ExpressionsCore.pattern list
    | PConstruct of TypeCore.resolved_datacon *
        (TypeCore.Field.name * ExpressionsCore.pattern) list
    | POpen of TypeCore.var
    | PAs of ExpressionsCore.pattern * ExpressionsCore.pattern
    | PAny
  type rec_flag = SurfaceSyntax.rec_flag = Nonrecursive | Recursive
  type expression =
      EConstraint of ExpressionsCore.expression * TypeCore.typ
    | EVar of TypeCore.db_index
    | EOpen of TypeCore.var
    | EBuiltin of string
    | ELet of ExpressionsCore.rec_flag * ExpressionsCore.patexpr list *
        ExpressionsCore.expression
    | ELetFlex of (TypeCore.type_binding * TypeCore.flavor) *
        ExpressionsCore.expression
    | ELocalType of TypeCore.data_type_group * ExpressionsCore.expression
    | EBigLambdas of (TypeCore.type_binding * TypeCore.flavor) list *
        ExpressionsCore.expression
    | ELambda of TypeCore.typ * TypeCore.typ * ExpressionsCore.expression
    | EAssign of ExpressionsCore.expression * ExpressionsCore.field *
        ExpressionsCore.expression
    | EAssignTag of ExpressionsCore.expression * TypeCore.resolved_datacon *
        ExpressionsCore.tag_update_info
    | EAccess of ExpressionsCore.expression * ExpressionsCore.field
    | EAssert of TypeCore.typ
    | EPack of TypeCore.typ * TypeCore.typ
    | EApply of ExpressionsCore.expression * ExpressionsCore.expression
    | ETApply of ExpressionsCore.expression * ExpressionsCore.tapp *
        Kind.kind
    | EMatch of bool * ExpressionsCore.expression *
        ExpressionsCore.patexpr list
    | ETuple of ExpressionsCore.expression list
    | EConstruct of TypeCore.resolved_datacon *
        (TypeCore.Field.name * ExpressionsCore.expression) list
    | EIfThenElse of bool * ExpressionsCore.expression *
        ExpressionsCore.expression * ExpressionsCore.expression
    | ELocated of ExpressionsCore.expression * TypeCore.location
    | EInt of int
    | EExplained of ExpressionsCore.expression
    | EGive of ExpressionsCore.expression * ExpressionsCore.expression
    | ETake of ExpressionsCore.expression * ExpressionsCore.expression
    | EOwns of ExpressionsCore.expression * ExpressionsCore.expression
    | EFail
  and tapp = Ordered of TypeCore.typ | Named of Variable.name * TypeCore.typ
  and patexpr = ExpressionsCore.pattern * ExpressionsCore.expression
  type definitions =
      TypeCore.location * ExpressionsCore.rec_flag *
      (ExpressionsCore.pattern * ExpressionsCore.expression) list
  type sig_item = Variable.name * TypeCore.typ
  type toplevel_item =
      DataTypeGroup of TypeCore.data_type_group
    | ValueDefinitions of ExpressionsCore.definitions
    | ValueDeclaration of ExpressionsCore.sig_item
  type implementation = ExpressionsCore.toplevel_item list
  type interface = ExpressionsCore.toplevel_item list
  val internal_ppat :
    (Buffer.t -> TypeCore.env * ExpressionsCore.pattern -> unit)
    Pervasives.ref
  val internal_ptapp :
    (Buffer.t -> TypeCore.env * ExpressionsCore.tapp -> unit) Pervasives.ref
end