Module Qcert.Compiler.Lib.QLambdaNRA


Require Import CompilerRuntime.
Require String.
Require QData.
Require QOperators.
Require LambdaNRA.
Require LambdaNRASugar.

Module QLambdaNRA(runtime:CompilerRuntime).

  Module Data := QData.QData runtime.
  Module Ops := QOperators.QOperators runtime.

  Definition expr : Set
    := LambdaNRA.lambda_nra.
  Definition lambda_expr : Set
    := LambdaNRA.lnra_lambda.
  Definition t : Set
    := expr.
  Definition var : Set
    := String.string.

  Definition lalambda : var -> expr -> lambda_expr
    := LambdaNRA.LNRALambda.
  Definition lavar : var -> expr
    := LambdaNRA.LNRAVar.
  Definition laconst : Data.qdata -> expr
    := LambdaNRA.LNRAConst.
  Definition latable : String.string -> expr
    := LambdaNRA.LNRATable.
  Definition labinop : Ops.Binary.op -> expr -> expr -> expr
    := LambdaNRA.LNRABinop.
  Definition launop : Ops.Unary.op -> expr -> expr
    := LambdaNRA.LNRAUnop.
  Definition lamap : lambda_expr -> expr -> expr
    := LambdaNRA.LNRAMap.
  Definition lafilter : lambda_expr -> expr -> expr
    := LambdaNRA.LNRAFilter.
  Definition lamapproduct : lambda_expr -> expr -> expr
    := LambdaNRA.LNRAMapProduct.
  Definition laproduct : expr -> expr -> expr
    := LambdaNRA.LNRAProduct.

  Definition ladot : String.string -> expr -> expr
    := LambdaNRASugar.LNRADot.
  Definition laarrow : String.string -> expr -> expr
    := LambdaNRASugar.LNRAArrow.
  Definition lastruct : list (String.string * expr) -> expr
    := LambdaNRASugar.LNRAStruct.
  Definition laflatmap : lambda_expr -> expr -> expr
    := LambdaNRASugar.LNRAFlatMap.

  Definition latableify : expr -> expr
    := LambdaNRASugar.la_tableify.

End QLambdaNRA.