-- Auxiliaries
module MetaVbles(..)
module BasicData(..)

-- SourceLanguage
module SourceLang(SourceTerm ,SourceTermVble ,TypedSourceTerm
                 ,SourceType ,SourceTypeVble ,STBase
                 ,FSTV       ,sTypeInt       ,sTypeBool
                 ,Annot      ,showannot
                 ,BoolOp     ,RelOp          ,ArithOp
                 )
module SourceLangParse(parsesourceexpr)
module SourceLangPrint(ppsourceexpr, ppsourcetype)
module SourceDataManagement(..)
module SourceTypeCheckMonad(..)
module SourceUnification(..)
module SourceTypeCheck(typechecksource)

-- ResidualLanguage
module ResidualLang(ResidualTerm,       ResTermVble,       TypedResidualTerm
                   ,EvidenceTerm,       EvVble,            ContextTerm
                   ,ResDeBruijnLevel
                   ,ResidualType,       ResTypeVble,       ResGenTypeVble
                   ,QualifiedType,      Pred, Preds
                   ,ResidualTypeScheme, ResSchemeVble,     ResGenSchemeVble
                   ,takeEvidence,       evidence2residual, elam
                   ,fill,               noredfill
                   ,scheme,             ered 
                   )
module ResidualLangPrint(ppresidualexpr, ppresidualtypescheme, ppresidualtype)
module ResidualReduction

-- Specialisation auxiliaries
module ResidualDataManagement(..)
module SpecMonad(..)
module ResidualGeneralizable(generalize,    regularize
                            ,Generalizable, DeQuantify)
module ResidualLangFVs(FRV)
module SpecAuxRels(Assignment, emptyAssgn, extendedWith, lookupfor
                  ,gen
                  ,srw, entlw
                  )
module ResidualUnification(Unifiable, Matchable, GenUnifiable, UnifMatch)
module PredsSimplify(glb, glbs, simplify, simplifySolving)
module PredsSolving(solve)
module ArityRaising(arityRaise)

-- Specialisation
module Spec(specialisesource)

-- Main
module Main

