summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2017-05-29 14:45:15 +0100
committerCsaba Hruska <csaba.hruska@gmail.com>2017-05-29 14:45:15 +0100
commit07bd8babb6b9991884ac2d1ca50436ce861b06c8 (patch)
tree25d82d91da2eb179a4ec9af15fa0801659360e54
parent1ab76c3545afab07cceee04bcfbec51d3c170e56 (diff)
plan
-rw-r--r--refactor.plan68
1 files changed, 68 insertions, 0 deletions
diff --git a/refactor.plan b/refactor.plan
new file mode 100644
index 00000000..25b6fbfc
--- /dev/null
+++ b/refactor.plan
@@ -0,0 +1,68 @@
1goals:
2 simple, clean API and dependency tree
3
4stage 1:
5ok - LambdaCube.Compiler.Utils
6import LambdaCube.Compiler.Pretty
7import LambdaCube.Compiler.DeBruijn
8
9typesig - import LambdaCube.Compiler.Lexer
10typesig - import LambdaCube.Compiler.DesugaredSource
11typesig - import LambdaCube.Compiler.Patterns
12typesig - import LambdaCube.Compiler.Statements
13import LambdaCube.Compiler.Parser
14
15stage 2:
16import LambdaCube.Compiler.Core
17import LambdaCube.Compiler.Infer
18import LambdaCube.Compiler.InferMonad
19
20stage 3:
21import LambdaCube.Compiler.CoreToIR
22
23IDEA:
24 add each module a Pattern module with the pattern synonyms that provides the rich API
25
26problem:
27 low level use of debruijn indices
28 too many and indiscpilined pattern synonyms
29
30
31type classes:
32 Debruijn: Rearrange, HasFreeVars, DeBruijnify
33 Pretty: PShow
34 Patterns: PatVars
35 DesugaredSource: SourceInfo, SetSourceInfo
36
37 Core: HasFName, Subst, MkDoc, NType
38
39data types:
40 Lexer: ParseEnv, Namespace
41 Parser: LCParseError, ParseWarning, DesugarInfo
42 Pretty: Fixity, Doc, DocAtom
43 Patterns: ParseCheck, Pat_ c, ParPat_ c, Lets a, GuardTree
44 DesugaredSource: FileInfo, Range, SI, SIName, FNameTag, Lit, SExp' a, Binder, Visibility, Stmt, Module_ a, Export, ImportItems, Extension
45 Utils: Void
46 Statements: PreStmt, StmtNode
47
48 Infer: CEnv, Env
49 InferMonad: ErrorMsg, Info
50 Core: ConName, TyConName, FunName, CaseFunName, TyCaseFunName, FunDef, Freq, Exp, Neutral, ExpType
51
52newtypes:
53 Lexer: ParseError
54 DeBruijn: FreeVars
55 DesugaredSource: SPos, FName
56 Utils: SData
57
58patterns:
59 Pretty: DText, DAt, DApp, DHApp, DSemi, DArr_, DCstr, DAnn, DLet, DComma, DPar, DParen, DBrace, DBracket, DOp, DOp0, DSep, DGlue, DArr, DForall,
60 DContext', DContext, DParContext, DLam, DLet'
61 Patterns: ParPat, PWildcard, PCon, ViewPat, PatType, PVarSimp, PConSimp, ViewPatSimp, PatTypeSimp, PParens, Otherwise
62 DesugaredSource: Ticked, CaseName, MatchName, SPos, SIName_, SIName, Tag, FTag, SBind, SPi, SLam, Wildcard, SLet, SLamV, SVar, SApp, SAppH, SAppV, SAppV2,
63 SBuiltin, SRHS, Section, SType, SConstraint, Parens, SAnn, SCW, TyType, HList, HCons, HNil, BList, BCons, BNil, UncurryS, AppsS, StLet, Primitive
64
65 Infer: EBind2, CheckType
66 Core: TType, NoRHS, Fun, CaseFun_, TyCaseFun_, App_, Con, TyCon, Lam, Pi, Let, SubstLet, CaseFun, TyCaseFun, Var, App, DFun, DFun_, UFun, DFunN,
67 DFunN_, ConN, TyConN, TTyCon0, :~>, TConstraint, Unit, TInt, TNat, TBool, TFloat, TString, TChar, TOrdering, TVec, Empty, TT, CUnit, CEmpty,
68 CstrT, CstrT', Coe, ParEval, T2, CW, CW_, CSplit,HLit, HInt, HFloat, HChar, HString, EBool, ENat, ReducedN, Reduced, FFix, NonNeut