From 8faecfdf9b1d829a1990f293364625d70a7a73c8 Mon Sep 17 00:00:00 2001 From: Steve Dunham Date: Sat, 19 Apr 2025 16:15:34 -0700 Subject: [PATCH] record update syntax --- TODO.md | 20 ++-- bootstrap/newt.js | 112 ++++++++++++++++------ newt-vscode/syntaxes/newt.tmLanguage.json | 4 + src/Lib/Elab.newt | 63 ++++++++++++ src/Lib/Parser.newt | 26 ++++- src/Lib/Syntax.newt | 12 ++- src/Lib/Tokenizer.newt | 5 +- src/Main.newt | 15 ++- tests/RUTest.newt | 19 ++++ tests/RUTest.newt.golden | 2 + 10 files changed, 224 insertions(+), 54 deletions(-) create mode 100644 tests/RUTest.newt create mode 100644 tests/RUTest.newt.golden diff --git a/TODO.md b/TODO.md index fa16489..ef359ac 100644 --- a/TODO.md +++ b/TODO.md @@ -1,15 +1,18 @@ ## TODO -Syntax -> Parser.Impl ? - -- [ ] Eq Nat is not being identified as tail recursive... +- [ ] vscode - run newt when switching editors +- [ ] inline struct getters - [x] fix string highlighting - [x] implement tail call optimization -- [x] implement magic nat +- [x] implement magic nat +- [ ] record update can't elaborate if type is unsolved meta + - need to postpone elab until meta is known. Create fresh meta for the term to return and have postponed elab fill it in later. - [ ] drop erased args on types and top level functions - [ ] can I do some inlining without blowing up code size? -- [ ] use hint table for auto solving. (I think walking the `toList` is a big chunk of performance in `Elab.newt`.) + - [ ] Maybe tag some functions as inline + - [ ] Eq Nat is not tail recursive because of the call to `==` +- [x] use hint table for auto solving. (I think walking the `toList` is a big chunk of performance in `Elab.newt`.) - [x] implement string enum (or number, but I'm using strings for tags at the moment) - [x] use monaco input method instead of lean's - [x] `Def` is shadowed between Types and Syntax (TCon vs DCon), detect this @@ -21,6 +24,7 @@ Syntax -> Parser.Impl ? - Two issues - I'm rewriting stuff in the context, leaving it in a bad state (forward references). I think I can avoid this. - The variables at the end of pattern matching have types with references in the wrong order. I think we can reorder them on dependencies. + - should w - Improve `auto` - [ ] Improve cases where the auto isn't solved because of a type error - [ ] Handle `Foo Blah`, `Foo a => Bar a` vs `Bar Blah` @@ -48,9 +52,6 @@ Syntax -> Parser.Impl ? - [x] get port to run - [x] something goes terribly wrong with traverse_ and for_ (related to erasure, I think) - [x] ~~don't use `take` - it's not stack safe~~ The newt version is stack safe - -More comments in code! This is getting big enough that I need to re-find my bearings when fixing stuff. - - [ ] report info in case of error - [x] tokenizer that can be ported to newt - [ ] Add default path for library, so we don't need symlinks everywhere and can write tests for the library @@ -62,8 +63,7 @@ More comments in code! This is getting big enough that I need to re-find my bear - need to scan sigs and then defs, will have to make sure Compile.idr puts them all in scope before processing each. - [x] Move on to next decl in case of error - [x] for parse error, seek to col 0 token and process next decl -- [ ] record update sugar, syntax TBD - - I think I'm going to hold off on this for now as it requires the type to elaborate. This ends up at the head of an app, which typically is inferred. We'd need a special case somewhere that infers its argument instead. +- [x] record update sugar - [x] Change `Ord` to be more like Idris - LT / EQ / GT (and entail equality) - [ ] Keep a `compare` function on `SortedMap` (like lean) - [x] keymap for monaco diff --git a/bootstrap/newt.js b/bootstrap/newt.js index c53beb2..1727902 100644 --- a/bootstrap/newt.js +++ b/bootstrap/newt.js @@ -254,8 +254,9 @@ const Prelude__$3C$3D_ = ( a$$0, _$$1, _$$2, _$$3 ) => (Prelude__$2F$3D_(null, P const Data_SortedMap_REC_lookupT23 = ( arg ) => { const _sc$$0 = arg.h5; switch (_sc$$0.tag) { case "Node3": { const sc$$14 = Prelude__$3C$3D_(null, arg.h3, arg.h4, _sc$$0.h4); switch (sc$$14) { case "False": { const sc$$15 = Prelude__$3C$3D_(null, arg.h3, arg.h4, _sc$$0.h6); switch (sc$$15) { case "False": return { tag: "Data.SortedMap.lookupT23", h0: null, h1: null, h2: null, h3: arg.h3, h4: arg.h4, h5: _sc$$0.h7 }; case "True": return { tag: "Data.SortedMap.lookupT23", h0: null, h1: null, h2: null, h3: arg.h3, h4: arg.h4, h5: _sc$$0.h5 }; } break; } case "True": return { tag: "Data.SortedMap.lookupT23", h0: null, h1: null, h2: null, h3: arg.h3, h4: arg.h4, h5: _sc$$0.h3 }; } break; } case "Node2": { const sc$$12 = Prelude__$3C$3D_(null, arg.h3, arg.h4, _sc$$0.h4); switch (sc$$12) { case "False": return { tag: "Data.SortedMap.lookupT23", h0: null, h1: null, h2: null, h3: arg.h3, h4: arg.h4, h5: _sc$$0.h5 }; case "True": return { tag: "Data.SortedMap.lookupT23", h0: null, h1: null, h2: null, h3: arg.h3, h4: arg.h4, h5: _sc$$0.h3 }; } break; } case "Leaf": { const sc$$10 = Prelude_compare(null, arg.h3)(_sc$$0.h2)(arg.h4); switch (sc$$10) { case "EQ": return { tag: "return", h0: Prelude_Just(null, Prelude__$2C_(null, null, _sc$$0.h2, _sc$$0.h3)) }; default: return { tag: "return", h0: Prelude_Nothing(null) }; } break; } } }; const Data_SortedMap_lookupT23 = ( h$$0, k$$1, v$$2, _$$3, _$$4, _$$5 ) => (bouncer(Data_SortedMap_REC_lookupT23, { tag: "Data.SortedMap.lookupT23", h0: h$$0, h1: k$$1, h2: v$$2, h3: _$$3, h4: _$$4, h5: _$$5 })); const Data_SortedMap_lookupMap = ( k$$0, v$$1, _$$2, _$$3, _$$4 ) => { switch (_$$4.tag) { case "MapOf": return Data_SortedMap_lookupT23(null, null, null, _$$2, _$$3, _$$4.h3); case "EmptyMap": return Prelude_Nothing(null); } }; -const Prelude_REC_mapMaybe = ( arg ) => { const _sc$$0 = arg.h3; switch (_sc$$0.tag) { case "_::_": { const sc$$7 = arg.h2(_sc$$0.h1); switch (sc$$7.tag) { case "Nothing": return { tag: "Prelude.mapMaybe", h0: null, h1: null, h2: arg.h2, h3: _sc$$0.h2 }; case "Just": return { tag: "return", h0: Prelude__$3A$3A_(null, sc$$7.h1, Prelude_mapMaybe(null, null, arg.h2, _sc$$0.h2)) }; } break; } case "Nil": return { tag: "return", h0: Prelude_Nil(null) }; } }; -const Prelude_mapMaybe = ( a$$0, b$$1, _$$2, _$$3 ) => (bouncer(Prelude_REC_mapMaybe, { tag: "Prelude.mapMaybe", h0: a$$0, h1: b$$1, h2: _$$2, h3: _$$3 })); +const Prelude_REC_mapMaybe_go = ( arg ) => { const _sc$$0 = arg.h6; switch (_sc$$0.tag) { case "_::_": { const sc$$10 = arg.h2(_sc$$0.h1); switch (sc$$10.tag) { case "Nothing": return { tag: "Prelude.mapMaybe.go", h0: arg.h0, h1: arg.h1, h2: arg.h2, h3: arg.h3, h4: arg.h4, h5: arg.h5, h6: _sc$$0.h2 }; case "Just": return { tag: "Prelude.mapMaybe.go", h0: arg.h0, h1: arg.h1, h2: arg.h2, h3: arg.h3, h4: arg.h4, h5: Prelude__$3A$3C_(null, arg.h5, sc$$10.h1), h6: _sc$$0.h2 }; } break; } case "Nil": return { tag: "return", h0: Prelude__$3C$3E$3E_(null, arg.h5, Prelude_Nil(null)) }; } }; +const Prelude_mapMaybe_go = ( _, _1, _2, _3, _4, _$$5, _$$6 ) => (bouncer(Prelude_REC_mapMaybe_go, { tag: "Prelude.mapMaybe.go", h0: _, h1: _1, h2: _2, h3: _3, h4: _4, h5: _$$5, h6: _$$6 })); +const Prelude_mapMaybe = ( a$$0, b$$1, _$$2, _$$3 ) => (Prelude_mapMaybe_go(a$$0, b$$1, _$$2, _$$3, null, Prelude_Lin(null), _$$3)); const Lib_Compile_JConst = ( h0, h1 ) => ({ tag: "JConst", h0: h0, h1: h1 }); const Lib_Compile_JReturn = ( h0 ) => ({ tag: "JReturn", h0: h0 }); const Lib_Compile_MkEnv = ( h0, h1 ) => ({ tag: "MkEnv", h0: h0, h1: h1 }); @@ -457,15 +458,50 @@ const Lib_Util_funArgs = ( _$$0 ) => (Lib_Util_funArgs_go(_$$0, null, _$$0, Prel const Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _$$9 ) => { switch (_$$9.tag) { case "CDefAlt": return "True"; default: return "False"; } }; const Prelude_REC_find = ( arg ) => { const _sc$$0 = arg.h2; switch (_sc$$0.tag) { case "_::_": { const sc$$6 = arg.h1(_sc$$0.h1); switch (sc$$6) { case "False": return { tag: "Prelude.find", h0: null, h1: arg.h1, h2: _sc$$0.h2 }; case "True": return { tag: "return", h0: Prelude_Just(null, _sc$$0.h1) }; } break; } case "Nil": return { tag: "return", h0: Prelude_Nothing(null) }; } }; const Prelude_find = ( a$$0, _$$1, _$$2 ) => (bouncer(Prelude_REC_find, { tag: "Prelude.find", h0: a$$0, h1: _$$1, h2: _$$2 })); +const Prelude_debugStr = (_, obj) => { + const go = (obj) => { + if (obj === null) return "_" + if (typeof obj == 'bigint') return ''+obj + if (obj.tag === '_,_') { + let rval = '(' + while (obj?.tag === '_,_') { + rval += go(obj.h2) + ', ' + obj = obj.h3 + } + return rval + go(obj) + ')' + } + if (obj?.tag === '_::_' || obj?.tag === 'Nil') { + let stuff = Prelude_listToArray(null,obj) + return '['+(stuff.map(go).join(', '))+']' + } + if (obj instanceof Array) { + return 'io['+(obj.map(go).join(', '))+']' + } + if (obj?.tag === 'S' || obj?.tag === 'Z') { + return ''+Prelude_natToInt(obj) + } else if (obj?.tag) { + let rval = '('+obj.tag + for(let i=0;;i++) { + let key = 'h'+i + if (!(key in obj)) break + rval += ' ' + go(obj[key]) + } + return rval+')' + } else { + return JSON.stringify(obj) + } + } + return go(obj) +}; const Lib_Types_Prelude_Eq$20Lib_Types_ConInfo$2C_$3D$3D_ = ( _$$0, _$$1 ) => { switch (_$$1) { case "EnumCon": switch (_$$0) { case "EnumCon": return "True"; default: return "False"; } break; case "ZeroCon": switch (_$$0) { case "ZeroCon": return "True"; default: return "False"; } break; case "SuccCon": switch (_$$0) { case "SuccCon": return "True"; default: return "False"; } break; case "NormalCon": switch (_$$0) { case "NormalCon": return "True"; default: return "False"; } break; } }; const Lib_Types_Prelude_Eq$20Lib_Types_ConInfo = Prelude_MkEq(null, ( eta ) => (( eta1 ) => (Lib_Types_Prelude_Eq$20Lib_Types_ConInfo$2C_$3D$3D_(eta, eta1)))); const Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo = ( _, _1, _2, _3, _4, _5, _6, _7, _$$8, _$$9 ) => { switch (_$$9.tag) { case "CConAlt": return Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_ConInfo)(_$$8)(_$$9.h1); default: return "False"; } }; -const Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _$$11, _$$12 ) => { let zeroAlt; const sc$$13 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo(_, _1, _2, _3, _4, _5, _6, _7, "ZeroCon", eta)), _$$12); switch (sc$$13.tag) { case "Just": { const _sc$$0 = sc$$13.h1; switch (_sc$$0.tag) { case "CConAlt": { zeroAlt = Lib_CompileExp_CLitAlt(Lib_Types_LInt(0), _sc$$0.h3); break; } default: { const sc$$16 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef(_, _1, _2, _3, _4, _5, _6, _7, _8, eta)), _$$12); switch (sc$$16.tag) { case "Just": { const _sc$$1 = sc$$16.h1; switch (_sc$$1.tag) { case "CDefAlt": { zeroAlt = Lib_CompileExp_CLitAlt(Lib_Types_LInt(0), _sc$$1.h0); break; } default: { zeroAlt = Prelude_fatalError(null, "Internal Error: No zero alt"); break; } } break; } default: { zeroAlt = Prelude_fatalError(null, "Internal Error: No zero alt"); break; } } break; } } break; } default: { const sc$$14 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef(_, _1, _2, _3, _4, _5, _6, _7, _8, eta)), _$$12); switch (sc$$14.tag) { case "Just": { const _sc$$0 = sc$$14.h1; switch (_sc$$0.tag) { case "CDefAlt": { zeroAlt = Lib_CompileExp_CLitAlt(Lib_Types_LInt(0), _sc$$0.h0); break; } default: { zeroAlt = Prelude_fatalError(null, "Internal Error: No zero alt"); break; } } break; } default: { zeroAlt = Prelude_fatalError(null, "Internal Error: No zero alt"); break; } } break; } } let succAlt; const sc$$14 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo(_, _1, _2, _3, _4, _5, _6, _7, "SuccCon", eta)), _$$12); switch (sc$$14.tag) { case "Just": { const _sc$$0 = sc$$14.h1; switch (_sc$$0.tag) { case "CConAlt": { succAlt = Lib_CompileExp_CDefAlt(Lib_CompileExp_CLet("x", Lib_CompileExp_CPrimOp("-", _$$11, Lib_CompileExp_CLit(Lib_Types_LInt(1))), _sc$$0.h3)); break; } default: { const sc$$17 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef(_, _1, _2, _3, _4, _5, _6, _7, _8, eta)), _$$12); switch (sc$$17.tag) { case "Just": { succAlt = sc$$17.h1; break; } default: { succAlt = Prelude_fatalError(null, "Internal Error: No succ alt"); break; } } break; } } break; } default: { const sc$$15 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef(_, _1, _2, _3, _4, _5, _6, _7, _8, eta)), _$$12); switch (sc$$15.tag) { case "Just": { succAlt = sc$$15.h1; break; } default: { succAlt = Prelude_fatalError(null, "Internal Error: No succ alt"); break; } } break; } } return Prelude__$3A$3A_(null, zeroAlt, Prelude__$3A$3A_(null, succAlt, Prelude_Nil(null))); }; +const Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _$$11, _$$12 ) => { let zeroAlt; const sc$$13 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo(_, _1, _2, _3, _4, _5, _6, _7, "ZeroCon", eta)), _$$12); switch (sc$$13.tag) { case "Just": { const _sc$$0 = sc$$13.h1; switch (_sc$$0.tag) { case "CConAlt": { zeroAlt = Prelude__$3A$3A_(null, Lib_CompileExp_CLitAlt(Lib_Types_LInt(0), _sc$$0.h3), Prelude_Nil(null)); break; } default: { zeroAlt = Prelude_fatalError(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("ERROR zeroAlt mismatch ")(Prelude_debugStr(null, sc$$13.h1)))("")); break; } } break; } default: { const sc$$14 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef(_, _1, _2, _3, _4, _5, _6, _7, _8, eta)), _$$12); switch (sc$$14.tag) { case "Just": { const _sc$$0 = sc$$14.h1; switch (_sc$$0.tag) { case "CDefAlt": { zeroAlt = Prelude__$3A$3A_(null, Lib_CompileExp_CLitAlt(Lib_Types_LInt(0), _sc$$0.h0), Prelude_Nil(null)); break; } default: { zeroAlt = Prelude_Nil(null); break; } } break; } default: { zeroAlt = Prelude_Nil(null); break; } } break; } } let succAlt; const sc$$14 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo(_, _1, _2, _3, _4, _5, _6, _7, "SuccCon", eta)), _$$12); switch (sc$$14.tag) { case "Just": { const _sc$$0 = sc$$14.h1; switch (_sc$$0.tag) { case "CConAlt": { succAlt = Prelude__$3A$3A_(null, Lib_CompileExp_CDefAlt(Lib_CompileExp_CLet("x", Lib_CompileExp_CPrimOp("-", _$$11, Lib_CompileExp_CLit(Lib_Types_LInt(1))), _sc$$0.h3)), Prelude_Nil(null)); break; } default: { succAlt = Prelude_fatalError(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("ERROR succAlt mismatch ")(Prelude_debugStr(null, sc$$14.h1)))("")); break; } } break; } default: { const sc$$15 = Prelude_find(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef(_, _1, _2, _3, _4, _5, _6, _7, _8, eta)), _$$12); switch (sc$$15.tag) { case "Just": { succAlt = Prelude__$3A$3A_(null, sc$$15.h1, Prelude_Nil(null)); break; } default: { succAlt = Prelude_Nil(null); break; } } break; } } return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20$28Prelude_List$20BND$3A0$29(null))(zeroAlt)(succAlt); }; const Lib_CompileExp_compileTerm_numAltP_enumAlt = ( _, _1, _2, _3, _4, _5, _6, _$$7 ) => { switch (_$$7.tag) { case "CConAlt": { const _sc$$0 = _$$7.h1; switch (_sc$$0) { case "EnumCon": return Lib_CompileExp_CLitAlt(Lib_Types_LString(_$$7.h0), _$$7.h3); default: return _$$7; } break; } default: return _$$7; } }; const Lib_CompileExp_compileTerm_numAltP = ( _, _1, _2, _3, _4, _5, _$$6 ) => { switch (_$$6.tag) { case "CConAlt": { const _sc$$0 = _$$6.h1; switch (_sc$$0) { case "ZeroCon": return "True"; case "SuccCon": return "True"; default: return "False"; } break; } default: return "False"; } }; -const Prelude_REC_any = ( arg ) => { const _sc$$0 = arg.h2; switch (_sc$$0.tag) { case "_::_": { const sc$$6 = arg.h1(_sc$$0.h1); switch (sc$$6) { case "False": return { tag: "Prelude.any", h0: null, h1: arg.h1, h2: _sc$$0.h2 }; case "True": return { tag: "return", h0: "True" }; } break; } case "Nil": return { tag: "return", h0: "False" }; } }; -const Prelude_any = ( a$$0, _$$1, _$$2 ) => (bouncer(Prelude_REC_any, { tag: "Prelude.any", h0: a$$0, h1: _$$1, h2: _$$2 })); -const Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon_fancyCons = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _$$12, _$$13 ) => { const sc$$14 = Prelude_any(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP(_, _1, _2, _3, _4, _5, eta)), _$$13); switch (sc$$14) { case "False": return Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt(_, _1, _2, _3, _4, _5, _6, eta)))(_$$13); case "True": return Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _$$12, _$$13); } }; +const Lib_CompileExp_REC_any = ( arg ) => { const _sc$$0 = arg.h2; switch (_sc$$0.tag) { case "_::_": { const sc$$6 = arg.h1(_sc$$0.h1); switch (sc$$6) { case "False": return { tag: "Lib.CompileExp.any", h0: null, h1: arg.h1, h2: _sc$$0.h2 }; case "True": return { tag: "return", h0: "True" }; } break; } case "Nil": return { tag: "return", h0: "False" }; } }; +const Lib_CompileExp_any = ( a$$0, _$$1, _$$2 ) => (bouncer(Lib_CompileExp_REC_any, { tag: "Lib.CompileExp.any", h0: a$$0, h1: _$$1, h2: _$$2 })); +const Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon_fancyCons = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _$$12, _$$13 ) => { const sc$$14 = Lib_CompileExp_any(null, ( eta ) => (Lib_CompileExp_compileTerm_numAltP(_, _1, _2, _3, _4, _5, eta)), _$$13); switch (sc$$14) { case "False": return Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Lib_CompileExp_compileTerm_numAltP_enumAlt(_, _1, _2, _3, _4, _5, _6, eta)))(_$$13); case "True": return Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _$$12, _$$13); } }; const Lib_CompileExp_lookupDef = ( _$$0, _$$1, _$$2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Ref2_getRef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Ref2_Defs, _$$0), ( defs ) => { const sc$$4 = Data_SortedMap_lookupMap$27(null, null, Lib_Common_Prelude_Ord$20Lib_Common_QName, _$$2, defs); switch (sc$$4.tag) { case "Nothing": return Lib_Types_error(null, _$$1, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_$$2)))(" not in scope")); case "Just": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(sc$$4.h1); } })); const Prelude_for = ( t$$0, f$$1, _$$2, appf$$3, a$$4, b$$5, _$$6, _$$7 ) => (Prelude_traverse(null, _$$2)(null)(null)(null)(appf$$3)(_$$7)(_$$6)); const Lib_CompileExp_compileTerm = ( _$$0, _$$1 ) => { switch (_$$1.tag) { case "Erased": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CErased); case "Lit": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CLit(_$$1.h1)); case "LetRec": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h3), ( t$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h4), ( u$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CLetRec(_$$1.h1, t$27, u$27)))))); case "Let": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h2), ( t$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h3), ( u$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CLet(_$$1.h1, t$27, u$27)))))); case "Case": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h1), ( t$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, _$$1.h2, ( $$case ) => { switch ($$case.tag) { case "CaseLit": return Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_CompileExp_CLitAlt($$case.h0, eta)), Lib_CompileExp_compileTerm(_$$0, $$case.h1)); case "CaseCons": { const _sc$$0 = $$case.h0; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Ref2_getRef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Ref2_Defs, _$$0), ( defs ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_lookupDef(_$$0, Lib_Common_emptyFC, $$case.h0), ( def ) => { switch (def.tag) { case "DCon": return Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_CompileExp_CConAlt(_sc$$0.h1, def.h0, $$case.h1, eta)), Lib_CompileExp_compileTerm(_$$0, $$case.h2)); default: return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))(" is not constructor")); } }))); break; } case "CaseDefault": return Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, Lib_CompileExp_CDefAlt, Lib_CompileExp_compileTerm(_$$0, $$case.h0)); } }), ( alts$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CCase(t$27, Lib_CompileExp_compileTerm_numAltP_enumAlt_isInfo_isDef_getBody_doNumCon_fancyCons(_$$0, _$$1, _$$1.h0, _$$1.h1, _$$1.h2, null, null, null, null, null, null, null, t$27, alts$27))))))); case "Pi": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h4), ( t$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, _$$1.h5), ( u$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CApp(Lib_CompileExp_CRef(Lib_Common_QN(Prelude_Nil(null), "PiType")), Prelude__$3A$3A_(null, t$27, Prelude__$3A$3A_(null, Lib_CompileExp_CLam(_$$1.h1, u$27), Prelude_Nil(null))), 0)))))); case "UU": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CRef(Lib_Common_QN(Prelude_Nil(null), "U"))); case "App": { const sc$$6 = Lib_Util_funArgs(_$$1); const _sc$$0 = sc$$6.h2; switch (_sc$$0.tag) { case "Meta": return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Types_Lib_Common_HasFC$20Lib_Types_Tm)(_$$1), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Compiling an unsolved meta ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Tm)(_$$1)))("")); case "Ref": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Ref2_getRef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Ref2_Defs, _$$0), ( defs ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(( eta ) => (Lib_CompileExp_compileTerm(_$$0, eta)))(sc$$6.h3), ( args$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_arityForName(_$$0, _sc$$0.h0, _sc$$0.h1), ( arity ) => { const sc$$16 = Prelude_the(Prelude_Maybe(null), Data_SortedMap_lookupMap$27(null, null, Lib_Common_Prelude_Ord$20Lib_Common_QName, _sc$$0.h1, defs)); switch (sc$$16.tag) { case "Just": { const _sc$$1 = sc$$16.h1; switch (_sc$$1.tag) { case "DCon": { const _sc$$2 = _sc$$1.h0; switch (_sc$$2) { case "SuccCon": return Lib_CompileExp_compileTerm_applySucc(_$$0, _$$1, _$$1.h0, _$$1.h1, _$$1.h2, null, args$27); default: return Lib_CompileExp_apply(Lib_CompileExp_CRef(_sc$$0.h1), args$27, Prelude_Lin(null), arity); } break; } default: return Lib_CompileExp_apply(Lib_CompileExp_CRef(_sc$$0.h1), args$27, Prelude_Lin(null), arity); } break; } default: return Lib_CompileExp_apply(Lib_CompileExp_CRef(_sc$$0.h1), args$27, Prelude_Lin(null), arity); } }))))); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("apply other ")(Lib_Prettier_render(90, Lib_Types_pprint(Prelude_Nil(null), sc$$6.h2))))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_compileTerm(_$$0, sc$$6.h2), ( t$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(( eta ) => (Lib_CompileExp_compileTerm(_$$0, eta)))(sc$$6.h3), ( args$27 ) => (Lib_CompileExp_apply(t$27, args$27, Prelude_Lin(null), 0))))))); } break; } case "Lam": return Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_CompileExp_CLam(_$$1.h1, eta)), Lib_CompileExp_compileTerm(_$$0, _$$1.h4)); case "Meta": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Compiling meta ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_$$1.h1)))("")); case "Ref": { const _sc$$0 = _$$1.h1; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_CompileExp_arityForName(_$$0, _$$1.h0, _$$1.h1), ( arity ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Ref2_getRef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Ref2_Defs, _$$0), ( defs ) => { switch (arity) { case 0: { const sc$$9 = Prelude_the(Prelude_Maybe(null), Data_SortedMap_lookupMap$27(null, null, Lib_Common_Prelude_Ord$20Lib_Common_QName, _$$1.h1, defs)); switch (sc$$9.tag) { case "Just": { const _sc$$1 = sc$$9.h1; switch (_sc$$1.tag) { case "DCon": { const _sc$$2 = _sc$$1.h0; switch (_sc$$2) { case "EnumCon": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CLit(Lib_Types_LString(_sc$$0.h1))); case "ZeroCon": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CLit(Lib_Types_LInt(0))); case "SuccCon": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CLam("x", Lib_CompileExp_CPrimOp("+", Lib_CompileExp_CLit(Lib_Types_LInt(1)), Lib_CompileExp_CBnd(0)))); default: return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CRef(_$$1.h1)); } break; } default: return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CRef(_$$1.h1)); } break; } default: return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CRef(_$$1.h1)); } break; } default: { const x = (arity) - (1); switch (x) { case 0: return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CRef(_$$1.h1)); default: return Lib_CompileExp_apply(Lib_CompileExp_CRef(_$$1.h1), Prelude_Nil(null), Prelude_Lin(null), arity); } break; } } }))); break; } case "Bnd": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_CompileExp_CBnd(_$$1.h1)); } }; @@ -574,10 +610,10 @@ const Main_showErrors = ( _$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, const Lib_Types__metaCtx = ( _$$0 ) => (_$$0.h5); const Lib_Types__hints = ( _$$0 ) => (_$$0.h2); const Lib_Types_MkTop = ( h0, h1, h2, h3, h4, h5, h6, h7, h8 ) => ({ tag: "MkTop", h0: h0, h1: h1, h2: h2, h3: h3, h4: h4, h5: h5, h6: h6, h7: h7, h8: h8 }); -const Lib_Types__ctxOps = ( _$$0 ) => (_$$0.h3); -const Lib_Types__ops = ( _$$0 ) => (_$$0.h8); const Lib_Types_putTop = ( _$$0 ) => (Lib_Types_MkM(null, ( _ ) => (Prelude_pure(null, Prelude_Prelude_Monad$20Prelude_IO)(null)(Prelude_Right(null, null, Prelude__$2C_(null, null, _$$0, "MkUnit")))))); const Lib_Types_modifyTop = ( _$$0 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( tc ) => (Lib_Types_putTop(_$$0(tc))))); +const Lib_Types__ctxOps = ( _$$0 ) => (_$$0.h3); +const Lib_Types__ops = ( _$$0 ) => (_$$0.h8); const Lib_Types__metas = ( _$$0 ) => (_$$0.h0); const Lib_Types_info = ( _$$0, _$$1 ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("INFO at ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_FC)(_$$0)))(": "))(_$$1))(""))); const Lib_Elab_rpprint = ( _$$0, _$$1 ) => (Lib_Prettier_render(90, Lib_Types_pprint(_$$0, _$$1))); @@ -590,7 +626,7 @@ const Lib_Types_showClosure = ( _$$0 ) => (Prelude__$2B$2B_(null, Prelude_Prelud const Lib_Types_Prelude_Show$20Lib_Types_Val$2Cshow = ( _$$0 ) => { switch (_$$0.tag) { case "VLit": return Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Literal)(_$$0.h1); case "VErased": return "ERASED"; case "VU": return "U"; case "VLetRec": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%letrec ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h1)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h2)))(" = "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h3)))(" in "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h4)))(""); case "VLet": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%let ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h1)))(" = "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h2)))(" in "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h3)))(""); case "VPi": { const _sc$$0 = _$$0.h2; switch (_sc$$0) { case "Auto": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%pi {{")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_$$0.h3)))(" "))(_$$0.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h4)))("}}. "))(Lib_Types_showClosure(_$$0.h5)))(")"); case "Explicit": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%pi (")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_$$0.h3)))(" "))(_$$0.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h4)))("). "))(Lib_Types_showClosure(_$$0.h5)))(")"); case "Implicit": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%pi {")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_$$0.h3)))(" "))(_$$0.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h4)))("}. "))(Lib_Types_showClosure(_$$0.h5)))(")"); } break; } case "VLam": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%lam ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_$$0.h3)))(""))(_$$0.h1))(" "))(Lib_Types_showClosure(_$$0.h4)))(")"); case "VMeta": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%meta ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_$$0.h1)))(" ("))(Prelude_show(null, Prelude_Prelude_Show$20Prelude_Nat)(Data_SnocList_snoclen(null, _$$0.h2))))(" sp :: Nil))"); case "VCase": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%case ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_$$0.h1)))(" ...)"); case "VRef": { const _sc$$0 = _$$0.h2; switch (_sc$$0.tag) { case "Lin": return Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_$$0.h1); default: return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_$$0.h1)))(" "))(Data_String_unwords(Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val))(Prelude__$3C$3E$3E_(null, _$$0.h2, Prelude_Nil(null))))))(")"); } break; } case "VVar": { const _sc$$0 = _$$0.h2; switch (_sc$$0.tag) { case "Lin": return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("%var")(Prelude_show(null, Prelude_Prelude_Show$20Prim_Int)(_$$0.h1)))(""); default: return Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("(%var")(Prelude_show(null, Prelude_Prelude_Show$20Prim_Int)(_$$0.h1)))(" "))(Data_String_unwords(Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val))(Prelude__$3C$3E$3E_(null, _$$0.h2, Prelude_Nil(null))))))(")"); } break; } } }; const Lib_Types_Prelude_Show$20Lib_Types_Val = Prelude_MkShow(null, Lib_Types_Prelude_Show$20Lib_Types_Val$2Cshow); const Lib_Syntax_RVar = ( h0, h1 ) => ({ tag: "RVar", h0: h0, h1: h1 }); -const Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw$2CgetFC = ( _$$0 ) => { switch (_$$0.tag) { case "RAs": return _$$0.h0; case "RWhere": return _$$0.h0; case "RIf": return _$$0.h0; case "RDo": return _$$0.h0; case "RHole": return _$$0.h0; case "RImplicit": return _$$0.h0; case "RCase": return _$$0.h0; case "RLit": return _$$0.h0; case "RAnn": return _$$0.h0; case "RLet": return _$$0.h0; case "RPi": return _$$0.h0; case "RU": return _$$0.h0; case "RApp": return _$$0.h0; case "RLam": return _$$0.h0; case "RVar": return _$$0.h0; } }; +const Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw$2CgetFC = ( _$$0 ) => { switch (_$$0.tag) { case "RUpdateRec": return _$$0.h0; case "RAs": return _$$0.h0; case "RWhere": return _$$0.h0; case "RIf": return _$$0.h0; case "RDo": return _$$0.h0; case "RHole": return _$$0.h0; case "RImplicit": return _$$0.h0; case "RCase": return _$$0.h0; case "RLit": return _$$0.h0; case "RAnn": return _$$0.h0; case "RLet": return _$$0.h0; case "RPi": return _$$0.h0; case "RU": return _$$0.h0; case "RApp": return _$$0.h0; case "RLam": return _$$0.h0; case "RVar": return _$$0.h0; } }; const Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw = Lib_Common_MkHasFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw$2CgetFC); const Lib_Elab__constraints = ( _$$0 ) => (_$$0.h0); const Lib_Types__types = ( _$$0 ) => (_$$0.h2); @@ -712,7 +748,11 @@ const Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo$2Cshow = ( _$$0 ) => (Lib_Syn const Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo = Prelude_MkShow(null, Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo$2Cshow); const Lib_Syntax_Prelude_Show$20Lib_Syntax_RCaseAlt$2Cshow = ( _$$0 ) => (Lib_Syntax_foo(Prelude__$3A$3A_(null, "MkAlt", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h0), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude_Nil(null)))))); const Lib_Syntax_Prelude_Show$20Lib_Syntax_RCaseAlt = Prelude_MkShow(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_RCaseAlt$2Cshow); -const Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw$2Cshow = ( _$$0 ) => { switch (_$$0.tag) { case "RAs": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RAs", Prelude__$3A$3A_(null, _$$0.h1, Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "RWhere": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Where", Prelude__$3A$3A_(null, "FIXME", Prelude_Nil(null)))); case "RIf": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "If", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h3), Prelude_Nil(null)))))); case "RDo": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "DO", Prelude__$3A$3A_(null, "FIXME", Prelude_Nil(null)))); case "RHole": return "?"; case "RImplicit": return "_"; case "RCase": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Case", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_RCaseAlt))(_$$0.h2), Prelude_Nil(null))))); case "RLit": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RLit", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Literal)(_$$0.h1), Prelude_Nil(null)))); case "RAnn": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RAnn", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "RLet": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Let", Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h1), Prelude__$3A$3A_(null, " : ", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, " = ", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h3), Prelude__$3A$3A_(null, " in ", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h4), Prelude_Nil(null)))))))))); case "RPi": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Pi", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h3), Prelude_Nil(null)))))); case "RU": return "U"; case "RApp": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "App", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_$$0.h3), Prelude_Nil(null)))))); case "RLam": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Lam", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "RVar": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RVar", Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h1), Prelude_Nil(null)))); } }; +const Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29$2Cshow = ( a$$0, _$$1, _$$2 ) => { switch (_$$2.tag) { case "Nothing": return "Nothing"; case "Just": return "Just {show a}"; } }; +const Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29 = ( a, _ ) => (Prelude_MkShow(null, ( eta ) => (Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29$2Cshow(null, _, eta)))); +const Lib_Syntax_Prelude_Show$20Lib_Syntax_UpdateClause$2Cshow = ( _$$0 ) => { switch (_$$0.tag) { case "ModifyField": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "ModifyField", Prelude__$3A$3A_(null, _$$0.h1, Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "AssignField": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "AssignField", Prelude__$3A$3A_(null, _$$0.h1, Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); } }; +const Lib_Syntax_Prelude_Show$20Lib_Syntax_UpdateClause = Prelude_MkShow(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_UpdateClause$2Cshow); +const Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw$2Cshow = ( _$$0 ) => { switch (_$$0.tag) { case "RUpdateRec": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RUpdateRec", Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_UpdateClause))(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw))(_$$0.h2), Prelude_Nil(null))))); case "RAs": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RAs", Prelude__$3A$3A_(null, _$$0.h1, Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "RWhere": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Where", Prelude__$3A$3A_(null, "FIXME", Prelude_Nil(null)))); case "RIf": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "If", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h3), Prelude_Nil(null)))))); case "RDo": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "DO", Prelude__$3A$3A_(null, "FIXME", Prelude_Nil(null)))); case "RHole": return "?"; case "RImplicit": return "_"; case "RCase": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Case", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_RCaseAlt))(_$$0.h2), Prelude_Nil(null))))); case "RLit": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RLit", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Literal)(_$$0.h1), Prelude_Nil(null)))); case "RAnn": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RAnn", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "RLet": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Let", Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h1), Prelude__$3A$3A_(null, " : ", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, " = ", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h3), Prelude__$3A$3A_(null, " in ", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h4), Prelude_Nil(null)))))))))); case "RPi": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Pi", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h3), Prelude_Nil(null)))))); case "RU": return "U"; case "RApp": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "App", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_$$0.h3), Prelude_Nil(null)))))); case "RLam": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "Lam", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Types_BindInfo)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null))))); case "RVar": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "RVar", Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h1), Prelude_Nil(null)))); } }; const Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw = Prelude_MkShow(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw$2Cshow); const Lib_Elab_REC_freshMeta_applyBDs = ( arg ) => { const _sc$$0 = arg.h7; switch (_sc$$0.tag) { case "_::_": { const _sc$$1 = _sc$$0.h1; switch (_sc$$1) { case "Defined": return { tag: "Lib.Elab.freshMeta.applyBDs", h0: arg.h0, h1: arg.h1, h2: arg.h2, h3: arg.h3, h4: arg.h4, h5: Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(arg.h5), h6: arg.h6, h7: _sc$$0.h2 }; case "Bound": return { tag: "return", h0: Lib_Types_App(Lib_Common_emptyFC, Lib_Elab_freshMeta_applyBDs(arg.h0, arg.h1, arg.h2, arg.h3, arg.h4, Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(arg.h5), arg.h6, _sc$$0.h2), Lib_Types_Bnd(Lib_Common_emptyFC, arg.h5)) }; } break; } case "Nil": return { tag: "return", h0: arg.h6 }; } }; const Lib_Elab_freshMeta_applyBDs = ( _, _1, _2, _3, _4, _$$5, _$$6, _$$7 ) => (bouncer(Lib_Elab_REC_freshMeta_applyBDs, { tag: "Lib.Elab.freshMeta.applyBDs", h0: _, h1: _1, h2: _2, h3: _3, h4: _4, h5: _$$5, h6: _$$6, h7: _$$7 })); @@ -735,7 +775,7 @@ const Lib_Elab_primType = ( _$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, nul const Lib_Elab_intType = Lib_Common_QN(Prelude__$3A$3A_(null, "Prim", Prelude_Nil(null)), "Int"); const Lib_Types_LChar = ( h0 ) => ({ tag: "LChar", h0: h0 }); const Lib_Elab_charType = Lib_Common_QN(Prelude__$3A$3A_(null, "Prim", Prelude_Nil(null)), "Char"); -const Lib_Elab_infer = ( _$$0, _$$1 ) => { switch (_$$1.tag) { case "RAs": return Lib_Types_error(null, _$$1.h0, "@ can only be used in patterns"); case "RImplicit": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( ty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, vty, "Normal"), ( tm ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tm, vty)))))))); case "RLit": { const _sc$$0 = _$$1.h1; switch (_sc$$0.tag) { case "LChar": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_primType(_$$1.h0, Lib_Elab_charType), ( ty ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lit(_$$1.h0, Lib_Types_LChar(_sc$$0.h0)), ty)))); case "LInt": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_primType(_$$1.h0, Lib_Elab_intType), ( ty ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lit(_$$1.h0, Lib_Types_LInt(_sc$$0.h0)), ty)))); case "LString": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_primType(_$$1.h0, Lib_Elab_stringType), ( ty ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lit(_$$1.h0, Lib_Types_LString(_sc$$0.h0)), ty)))); } break; } case "RAnn": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, Lib_Types_VU(_$$1.h0)), ( ty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h1, vty), ( tm ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tm, vty)))))))); case "RLet": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, Lib_Types_VU(Lib_Common_emptyFC)), ( ty$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty$27), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h3, vty), ( v$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", v$27), ( vv ) => { const ctx$27 = Lib_Types_define(_$$0, _$$1.h1, vv, vty); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(ctx$27, _$$1.h4), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Let(_$$1.h0, _$$1.h1, v$27, $$sc.h2), $$sc.h3)))); }))))))); case "RPi": { const _sc$$0 = _$$1.h1; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, Lib_Types_VU(_sc$$0.h0)), ( ty$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty$27), ( vty$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$0.h1, vty$27), _$$1.h3, Lib_Types_VU(_sc$$0.h0)), ( ty2$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Pi(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, ty$27, ty2$27), Lib_Types_VU(_sc$$0.h0))))))))); break; } case "RU": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_UU(_$$1.h0), Lib_Types_VU(_$$1.h0))); case "RApp": { const sc$$6 = Prelude_the(Lib_Types_Icit, _$$1.h3); switch (sc$$6) { case "Auto": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _$$1.h1), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, "Auto", Prelude__$2C_(null, null, $$sc.h2, $$sc.h3))))), ( $$sc ) => { const _sc$$0 = $$sc.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta(_sc$$0.h3), ( tty$27 ) => { switch (tty$27.tag) { case "VPi": { const sc$$24 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(tty$27.h2)($$sc.h2); switch (sc$$24) { case "False": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("IcitMismatch ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)($$sc.h2)))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(tty$27.h2)))("")); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tty$27.h4, tty$27.h5)); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("unify PI for ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(tty$27)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_Types_MkClosure(Lib_Types__env(_$$0), eta)), Lib_Elab_freshMeta(Lib_Types_extend(_$$0, ":ins", a), _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal")), ( b ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(_$$1.h0, _$$0, tty$27, Lib_Types_VPi(_$$1.h0, ":ins", $$sc.h2, "Many", a, b)), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, a, b)))))))))); } }), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, $$sc1.h2), ( u ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", u), ( u$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_($$sc1.h3, u$27), ( bappu ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_App(_$$1.h0, _sc$$0.h2, u), bappu)))))))))); }); case "Explicit": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _$$1.h1), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_insert(_$$0, $$sc.h2, $$sc.h3), ( $$sc1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, "Explicit", Prelude__$2C_(null, null, $$sc1.h2, $$sc1.h3))))))), ( $$sc ) => { const _sc$$0 = $$sc.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta(_sc$$0.h3), ( tty$27 ) => { switch (tty$27.tag) { case "VPi": { const sc$$24 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(tty$27.h2)($$sc.h2); switch (sc$$24) { case "False": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("IcitMismatch ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)($$sc.h2)))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(tty$27.h2)))("")); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tty$27.h4, tty$27.h5)); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("unify PI for ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(tty$27)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_Types_MkClosure(Lib_Types__env(_$$0), eta)), Lib_Elab_freshMeta(Lib_Types_extend(_$$0, ":ins", a), _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal")), ( b ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(_$$1.h0, _$$0, tty$27, Lib_Types_VPi(_$$1.h0, ":ins", $$sc.h2, "Many", a, b)), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, a, b)))))))))); } }), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, $$sc1.h2), ( u ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", u), ( u$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_($$sc1.h3, u$27), ( bappu ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_App(_$$1.h0, _sc$$0.h2, u), bappu)))))))))); }); case "Implicit": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _$$1.h1), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, "Implicit", Prelude__$2C_(null, null, $$sc.h2, $$sc.h3))))), ( $$sc ) => { const _sc$$0 = $$sc.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta(_sc$$0.h3), ( tty$27 ) => { switch (tty$27.tag) { case "VPi": { const sc$$24 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(tty$27.h2)($$sc.h2); switch (sc$$24) { case "False": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("IcitMismatch ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)($$sc.h2)))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(tty$27.h2)))("")); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tty$27.h4, tty$27.h5)); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("unify PI for ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(tty$27)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_Types_MkClosure(Lib_Types__env(_$$0), eta)), Lib_Elab_freshMeta(Lib_Types_extend(_$$0, ":ins", a), _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal")), ( b ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(_$$1.h0, _$$0, tty$27, Lib_Types_VPi(_$$1.h0, ":ins", $$sc.h2, "Many", a, b)), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, a, b)))))))))); } }), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, $$sc1.h2), ( u ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", u), ( u$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_($$sc1.h3, u$27), ( bappu ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_App(_$$1.h0, _sc$$0.h2, u), bappu)))))))))); }); } break; } case "RLam": { const _sc$$0 = _$$1.h1; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _sc$$0.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => { const ctx$27 = Lib_Types_extend(_$$0, _sc$$0.h1, a); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(ctx$27, _$$1.h2), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("make lam for ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))(" scope "))(Lib_Elab_rpprint(Lib_Types_names(_$$0), $$sc.h2)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)($$sc.h3)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_quote(Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(Lib_Types__lvl(_$$0)), $$sc.h3), ( tyb ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lam(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, $$sc.h2), Lib_Types_VPi(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, a, Lib_Types_MkClosure(Lib_Types__env(_$$0), tyb)))))))))); }); break; } case "RVar": return Lib_Elab_infer_go(_$$0, _$$1, _$$1.h0, _$$1.h1, null, 0, Lib_Types__types(_$$0)); default: return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$1), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Implement infer ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$1)))("")); } }; +const Lib_Elab_infer = ( _$$0, _$$1 ) => { switch (_$$1.tag) { case "RUpdateRec": return Lib_Types_error(null, _$$1.h0, "I can't infer record updates"); case "RAs": return Lib_Types_error(null, _$$1.h0, "@ can only be used in patterns"); case "RImplicit": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( ty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, vty, "Normal"), ( tm ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tm, vty)))))))); case "RLit": { const _sc$$0 = _$$1.h1; switch (_sc$$0.tag) { case "LChar": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_primType(_$$1.h0, Lib_Elab_charType), ( ty ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lit(_$$1.h0, Lib_Types_LChar(_sc$$0.h0)), ty)))); case "LInt": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_primType(_$$1.h0, Lib_Elab_intType), ( ty ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lit(_$$1.h0, Lib_Types_LInt(_sc$$0.h0)), ty)))); case "LString": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_primType(_$$1.h0, Lib_Elab_stringType), ( ty ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lit(_$$1.h0, Lib_Types_LString(_sc$$0.h0)), ty)))); } break; } case "RAnn": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, Lib_Types_VU(_$$1.h0)), ( ty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h1, vty), ( tm ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tm, vty)))))))); case "RLet": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, Lib_Types_VU(Lib_Common_emptyFC)), ( ty$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty$27), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h3, vty), ( v$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", v$27), ( vv ) => { const ctx$27 = Lib_Types_define(_$$0, _$$1.h1, vv, vty); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(ctx$27, _$$1.h4), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Let(_$$1.h0, _$$1.h1, v$27, $$sc.h2), $$sc.h3)))); }))))))); case "RPi": { const _sc$$0 = _$$1.h1; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, Lib_Types_VU(_sc$$0.h0)), ( ty$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty$27), ( vty$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$0.h1, vty$27), _$$1.h3, Lib_Types_VU(_sc$$0.h0)), ( ty2$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Pi(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, ty$27, ty2$27), Lib_Types_VU(_sc$$0.h0))))))))); break; } case "RU": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_UU(_$$1.h0), Lib_Types_VU(_$$1.h0))); case "RApp": { const sc$$6 = Prelude_the(Lib_Types_Icit, _$$1.h3); switch (sc$$6) { case "Auto": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _$$1.h1), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, "Auto", Prelude__$2C_(null, null, $$sc.h2, $$sc.h3))))), ( $$sc ) => { const _sc$$0 = $$sc.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta(_sc$$0.h3), ( tty$27 ) => { switch (tty$27.tag) { case "VPi": { const sc$$24 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(tty$27.h2)($$sc.h2); switch (sc$$24) { case "False": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("IcitMismatch ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)($$sc.h2)))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(tty$27.h2)))("")); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tty$27.h4, tty$27.h5)); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("unify PI for ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(tty$27)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_Types_MkClosure(Lib_Types__env(_$$0), eta)), Lib_Elab_freshMeta(Lib_Types_extend(_$$0, ":ins", a), _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal")), ( b ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(_$$1.h0, _$$0, tty$27, Lib_Types_VPi(_$$1.h0, ":ins", $$sc.h2, "Many", a, b)), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, a, b)))))))))); } }), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, $$sc1.h2), ( u ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", u), ( u$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_($$sc1.h3, u$27), ( bappu ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_App(_$$1.h0, _sc$$0.h2, u), bappu)))))))))); }); case "Explicit": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _$$1.h1), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_insert(_$$0, $$sc.h2, $$sc.h3), ( $$sc1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, "Explicit", Prelude__$2C_(null, null, $$sc1.h2, $$sc1.h3))))))), ( $$sc ) => { const _sc$$0 = $$sc.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta(_sc$$0.h3), ( tty$27 ) => { switch (tty$27.tag) { case "VPi": { const sc$$24 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(tty$27.h2)($$sc.h2); switch (sc$$24) { case "False": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("IcitMismatch ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)($$sc.h2)))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(tty$27.h2)))("")); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tty$27.h4, tty$27.h5)); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("unify PI for ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(tty$27)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_Types_MkClosure(Lib_Types__env(_$$0), eta)), Lib_Elab_freshMeta(Lib_Types_extend(_$$0, ":ins", a), _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal")), ( b ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(_$$1.h0, _$$0, tty$27, Lib_Types_VPi(_$$1.h0, ":ins", $$sc.h2, "Many", a, b)), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, a, b)))))))))); } }), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, $$sc1.h2), ( u ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", u), ( u$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_($$sc1.h3, u$27), ( bappu ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_App(_$$1.h0, _sc$$0.h2, u), bappu)))))))))); }); case "Implicit": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _$$1.h1), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, "Implicit", Prelude__$2C_(null, null, $$sc.h2, $$sc.h3))))), ( $$sc ) => { const _sc$$0 = $$sc.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta(_sc$$0.h3), ( tty$27 ) => { switch (tty$27.tag) { case "VPi": { const sc$$24 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(tty$27.h2)($$sc.h2); switch (sc$$24) { case "False": return Lib_Types_error(null, _$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("IcitMismatch ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)($$sc.h2)))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(tty$27.h2)))("")); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, tty$27.h4, tty$27.h5)); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("unify PI for ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(tty$27)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Lib_Types_MkClosure(Lib_Types__env(_$$0), eta)), Lib_Elab_freshMeta(Lib_Types_extend(_$$0, ":ins", a), _$$1.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal")), ( b ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(_$$1.h0, _$$0, tty$27, Lib_Types_VPi(_$$1.h0, ":ins", $$sc.h2, "Many", a, b)), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, a, b)))))))))); } }), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _$$1.h2, $$sc1.h2), ( u ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", u), ( u$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_($$sc1.h3, u$27), ( bappu ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_App(_$$1.h0, _sc$$0.h2, u), bappu)))))))))); }); } break; } case "RLam": { const _sc$$0 = _$$1.h1; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_freshMeta(_$$0, _sc$$0.h0, Lib_Types_VU(Lib_Common_emptyFC), "Normal"), ( eta ) => (Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", eta))), ( a ) => { const ctx$27 = Lib_Types_extend(_$$0, _sc$$0.h1, a); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(ctx$27, _$$1.h2), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("make lam for ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))(" scope "))(Lib_Elab_rpprint(Lib_Types_names(_$$0), $$sc.h2)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)($$sc.h3)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_quote(Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(Lib_Types__lvl(_$$0)), $$sc.h3), ( tyb ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Lib_Types_Lam(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, $$sc.h2), Lib_Types_VPi(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, a, Lib_Types_MkClosure(Lib_Types__env(_$$0), tyb)))))))))); }); break; } case "RVar": return Lib_Elab_infer_go(_$$0, _$$1, _$$1.h0, _$$1.h1, null, 0, Lib_Types__types(_$$0)); default: return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$1), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Implement infer ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(_$$1)))("")); } }; const Lib_Eval_prvalCtx = ( ctx$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_quote(Lib_Types__lvl(ctx$$0), _$$1), ( tm ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Prettier_render(90, Lib_Types_pprint(Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(ctx$$0)), tm)))))); const Lib_Types_logM = ( _$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => (Prelude_when(null, Lib_Types_Prelude_Applicative$20Lib_Types_M, Prelude__$3C$3D_(null, Prelude_Prelude_Ord$20Prim_Int, _$$0, Lib_Types__verbose(top)), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, _$$1, ( msg ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, msg)))))))); const Lib_Types_debugM = ( _$$0 ) => (Lib_Types_logM(2, _$$0)); @@ -744,8 +784,6 @@ const Lib_Elab_showCtx_isVar = ( _, _1, _$$2, _$$3 ) => { switch (_$$3.tag) { ca const Lib_Elab_showCtx_isVar_go = ( _, _1, _2, _$$3, _$$4, _$$5, _$$6 ) => { switch (_$$5.tag) { case "_::_": { const _sc$$0 = _$$5.h1; const _sc$$1 = _sc$$0.h3; const sc$$18 = Lib_Elab_showCtx_isVar(_, _1, _$$4, _sc$$0.h2); switch (sc$$18) { case "False": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_quote(Lib_Types__lvl(_), _sc$$0.h2), ( tm ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_quote(Lib_Types__lvl(_), _sc$$1.h3), ( tty ) => (Lib_Elab_showCtx_isVar_go(_, _1, _2, _$$3, Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(_$$4), _$$5.h2, Prelude__$3A$3A_(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(" ")(_sc$$1.h2))(" = "))(Lib_Elab_rpprint(_$$3, tm)))(" : "))(Lib_Elab_rpprint(_$$3, tty)))(""), _$$6)))))); case "True": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_quote(Lib_Types__lvl(_), _sc$$1.h3), ( tty ) => (Lib_Elab_showCtx_isVar_go(_, _1, _2, _$$3, Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(_$$4), _$$5.h2, Prelude__$3A$3A_(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(" ")(_sc$$1.h2))(" : "))(Lib_Elab_rpprint(_$$3, tty)))(""), _$$6)))); } break; } case "Nil": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(_$$6); } }; const Lib_Elab_showCtx = ( _$$0 ) => (Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Prelude__$2218_(null, null, null, Prelude_unlines, Prelude_reverse(null), eta)), Lib_Elab_showCtx_isVar_go(_$$0, null, null, Lib_Types_names(_$$0), 0, Prelude_reverse(null)(Prelude_zip(null, null, Lib_Types__env(_$$0), Lib_Types__types(_$$0))), Prelude_Nil(null)))); const Lib_Types__ctxFC = ( _$$0 ) => (_$$0.h4); -const Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29$2Cshow = ( a$$0, _$$1, _$$2 ) => { switch (_$$2.tag) { case "Nothing": return "Nothing"; case "Just": return "Just {show a}"; } }; -const Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29 = ( a, _ ) => (Prelude_MkShow(null, ( eta ) => (Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29$2Cshow(null, _, eta)))); const Lib_Syntax_Prelude_Show$20Lib_Syntax_Pattern$2Cshow = ( _$$0 ) => { switch (_$$0.tag) { case "PatLit": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "PatLit", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Literal)(_$$0.h1), Prelude_Nil(null)))); case "PatWild": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "PatWild", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_$$0.h1), Prelude_Nil(null)))); case "PatCon": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "PatCon", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_$$0.h2), Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Pattern))(_$$0.h3), Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_Maybe$20BND$3A1$29(null, Prelude_Prelude_Show$20Prim_String))(_$$0.h4), Prelude_Nil(null))))))); case "PatVar": return Lib_Syntax_foo(Prelude__$3A$3A_(null, "PatVar", Prelude__$3A$3A_(null, Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_$$0.h1), Prelude__$3A$3A_(null, Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_$$0.h2), Prelude_Nil(null))))); } }; const Lib_Syntax_Prelude_Show$20Lib_Syntax_Pattern = Prelude_MkShow(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Pattern$2Cshow); const Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Pattern$2CgetFC = ( _$$0 ) => { switch (_$$0.tag) { case "PatLit": return _$$0.h0; case "PatWild": return _$$0.h0; case "PatCon": return _$$0.h0; case "PatVar": return _$$0.h0; } }; @@ -848,7 +886,14 @@ const Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Decl = Lib_Common_MkHasFC(null, L const Lib_Elab_makeClause = ( _$$0 ) => { const sc$$5 = Lib_Elab_splitArgs(_$$0.h2, Prelude_Nil(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(Lib_Elab_mkPat)(sc$$5.h3), ( pats ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Syntax_MkClause(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$0.h2), Prelude_Nil(null), pats, _$$0.h3)))); }; const Prelude_unless = ( f$$0, _$$1, _$$2, _$$3 ) => (Prelude_when(null, _$$1, Prelude_not(_$$2), _$$3)); const Lib_Elab_checkWhere = ( _$$0, _$$1, _$$2, _$$3 ) => { switch (_$$1.tag) { case "_::_": { const _sc$$0 = _$$1.h1; switch (_sc$$0.tag) { case "TypeSig": { const _sc$$1 = _sc$$0.h1; switch (_sc$$1.tag) { case "_::_": { const _sc$$2 = _sc$$1.h2; switch (_sc$$2.tag) { case "Nil": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _sc$$0.h2, Lib_Types_VU(_sc$$0.h0)), ( funTy ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("where clause ")(_sc$$1.h1))(" : "))(Lib_Elab_rpprint(Lib_Types_names(_$$0), funTy)))(""))), ( _ ) => { const _sc$$3 = _$$1.h2; switch (_sc$$3.tag) { case "_::_": { const _sc$$4 = _sc$$3.h1; switch (_sc$$4.tag) { case "FunDef": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_unless(null, Lib_Types_Prelude_Applicative$20Lib_Types_M, Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(_sc$$1.h1)(_sc$$4.h1), ( _1 ) => (Lib_Types_error(null, _sc$$4.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected def for ")(_sc$$1.h1))("")))), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(Lib_Elab_makeClause)(_sc$$4.h2), ( clauses$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", funTy), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _2 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(_sc$$1.h1))(" vty is "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(vty)))(""))), ( _2 ) => { const ctx$27 = Lib_Types_extend(_$$0, _sc$$1.h1, vty); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_buildTree(Lib_Types_withPos(ctx$27, _sc$$4.h0), Lib_Elab_MkProb(clauses$27, vty)), ( tm ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(ctx$27), "CBN", tm), ( vtm ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_checkWhere(ctx$27, _sc$$3.h2, _$$2, _$$3), ( ty$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_LetRec(_sc$$0.h0, _sc$$1.h1, funTy, tm, ty$27)))))))); }))))))))); default: return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Decl)(_sc$$3.h1), "expected function definition"); } break; } default: return Lib_Types_error(null, _sc$$0.h0, "expected function definition after this signature"); } }))); default: return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Decl)(_$$1.h1), "expected type signature"); } break; } default: return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Decl)(_$$1.h1), "expected type signature"); } break; } default: return Lib_Types_error(null, Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Decl)(_$$1.h1), "expected type signature"); } break; } default: return Lib_Elab_check(_$$0, _$$2, _$$3); } }; -const Lib_Elab_check = ( _$$0, _$$1, _$$2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_forceType(Lib_Types__env(_$$0), _$$2), ( ty$27 ) => { const sc$$4 = Prelude__$2C_(null, null, _$$1, ty$27); const _sc$$0 = sc$$4.h2; switch (_sc$$0.tag) { case "RWhere": return Lib_Elab_checkWhere(_$$0, Lib_Elab_collectDecl(_sc$$0.h1), _sc$$0.h2, sc$$4.h3); case "RIf": { const tm$27 = Lib_Syntax_RCase(_sc$$0.h0, _sc$$0.h1, Prelude__$3A$3A_(null, Lib_Syntax_MkAlt(Lib_Syntax_RVar(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_sc$$0.h2), "True"), _sc$$0.h2), Prelude__$3A$3A_(null, Lib_Syntax_MkAlt(Lib_Syntax_RVar(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_sc$$0.h3), "False"), _sc$$0.h3), Prelude_Nil(null)))); return Lib_Elab_check(_$$0, tm$27, sc$$4.h3); break; } case "RDo": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_undo(_sc$$0.h0, _sc$$0.h1), ( stmts$27 ) => (Lib_Elab_check(_$$0, stmts$27, sc$$4.h3))); case "RHole": return Lib_Elab_freshMeta(_$$0, _sc$$0.h0, sc$$4.h3, "User"); case "RImplicit": return Lib_Elab_freshMeta(_$$0, _sc$$0.h0, sc$$4.h3, "Normal"); case "RCase": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _sc$$0.h1), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta($$sc.h3), ( scty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("SCTM ")(Lib_Elab_rpprint(Lib_Types_names(_$$0), $$sc.h2)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _1 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("SCTY ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(scty)))(""))), ( _1 ) => { const scnm = Lib_Elab_fresh(_$$0, "sc"); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, _sc$$0.h2, ( $$case ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_mkPat(Prelude__$2C_(null, null, $$case.h0, "Explicit")), ( pat$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Syntax_MkClause(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)($$case.h0), Prelude__$3A$3A_(null, Prelude__$2C_(null, null, scnm, pat$27), Prelude_Nil(null)), Prelude_Nil(null), $$case.h1)))))), ( clauses ) => { const ctx$27 = Lib_Types_withPos(Lib_Types_extend(_$$0, scnm, scty), Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$1)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_buildTree(ctx$27, Lib_Elab_MkProb(clauses, sc$$4.h3)), ( tree ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Let(_sc$$0.h0, scnm, $$sc.h2, tree)))); }))); }))))))); case "RLet": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _sc$$0.h2, Lib_Types_VU(Lib_Common_emptyFC)), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty$271), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _sc$$0.h3, vty), ( v$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", v$27), ( vv ) => { const ctx$27 = Lib_Types_define(_$$0, _sc$$0.h1, vv, vty); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(ctx$27, _sc$$0.h4, sc$$4.h3), ( sc$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Let(_sc$$0.h0, _sc$$0.h1, v$27, sc$27)))); }))))))); case "RLam": { const _sc$$1 = _sc$$0.h1; const _sc$$2 = sc$$4.h3; switch (_sc$$2.tag) { case "VPi": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("icits ")(_sc$$1.h1))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_sc$$1.h2)))(" "))(_sc$$2.h1))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_sc$$2.h2)))(""))), ( _ ) => { const sc$$23 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(_sc$$1.h2)(_sc$$2.h2); switch (sc$$23) { case "False": { const sc$$24 = Prelude__$2F$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit, _sc$$2.h2, "Explicit"); switch (sc$$24) { case "False": return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Icity issue checking ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" at "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(sc$$4.h3)))("")); case "True": { const $var = Lib_Types_VVar(_sc$$0.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$2.h5, $var), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$2.h1, _sc$$2.h4), sc$$4.h2, ty$271), ( sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(_sc$$0.h0, _sc$$2.h1, _sc$$1.h2, _sc$$2.h3, sc)))))); break; } } break; } case "True": { const $var = Lib_Types_VVar(_sc$$0.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); const ctx$27 = Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$2.h4); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$2.h5, $var), ( bapp ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(ctx$27, _sc$$0.h2, bapp), ( tm$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(_sc$$0.h0, _sc$$1.h1, _sc$$1.h2, _sc$$2.h3, tm$27)))))); break; } } }); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_prvalCtx(_$$0, sc$$4.h3), ( pty ) => (Lib_Types_error(null, _sc$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected pi type, got ")(pty))("")))); } break; } default: { const _sc$$1 = sc$$4.h3; switch (_sc$$1.tag) { case "VPi": { const _sc$$2 = _sc$$1.h2; switch (_sc$$2) { case "Auto": { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX edge case add auto lambda {")(_sc$$1.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_sc$$1.h4)))("} to "))(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" "))), ( _ ) => { const $var = Lib_Types_VVar(_sc$$1.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$1.h5, $var), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debugM(Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_prvalCtx(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), ty$271), ( pty$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX ty' is ")(pty$27))(""))))), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), sc$$4.h2, ty$271), ( sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _sc$$1.h1, "Auto", _sc$$1.h3, sc)))))))); }); break; } case "Implicit": { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX edge case add implicit lambda {")(_sc$$1.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_sc$$1.h4)))("} to "))(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" "))), ( _ ) => { const $var = Lib_Types_VVar(_sc$$1.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$1.h5, $var), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debugM(Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_prvalCtx(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), ty$271), ( pty$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX ty' is ")(pty$27))(""))))), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), sc$$4.h2, ty$271), ( sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _sc$$1.h1, "Implicit", _sc$$1.h3, sc)))))))); }); break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, sc$$4.h2), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_insert(_$$0, $$sc.h2, $$sc.h3), ( $$sc1 ) => { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("INFER ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" to ("))(Lib_Elab_rpprint(names, $$sc1.h2)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)($$sc1.h3)))(") expect "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(sc$$4.h3)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _$$0, $$sc1.h3, sc$$4.h3), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc1.h2))))); }))); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, sc$$4.h2), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_insert(_$$0, $$sc.h2, $$sc.h3), ( $$sc1 ) => { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("INFER ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" to ("))(Lib_Elab_rpprint(names, $$sc1.h2)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)($$sc1.h3)))(") expect "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(sc$$4.h3)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _$$0, $$sc1.h3, sc$$4.h3), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc1.h2))))); }))); } break; } } })); +const Lib_Elab_updateRec_doClause_go$27 = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _$$12 ) => { switch (_$$12.tag) { case "_::_": { const sc$$16 = Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(Prelude_fst(null, null, _$$12.h1))(_9); switch (sc$$16) { case "False": return Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Prelude__$3A$3A_(null, _$$12.h1, eta)), Lib_Elab_updateRec_doClause_go$27(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _$$12.h2)); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$3A$3A_(null, Prelude__$2C_(null, null, _9, _10), _$$12.h2)); } break; } case "Nil": return Lib_Types_error(null, _8, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(_9))(" is not a field of "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_4)))("")); } }; +const Lib_Elab_updateRec_doClause_go = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _$$12 ) => { switch (_$$12.tag) { case "_::_": { const sc$$16 = Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(Prelude_fst(null, null, _$$12.h1))(_9); switch (sc$$16) { case "False": return Prelude__$3C$$$3E_(null, Lib_Types_Prelude_Functor$20Lib_Types_M, null, null, ( eta ) => (Prelude__$3A$3A_(null, _$$12.h1, eta)), Lib_Elab_updateRec_doClause_go(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _$$12.h2)); case "True": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$3A$3A_(null, Prelude__$2C_(null, null, _9, Lib_Syntax_RApp(_8, _10, Prelude_snd(null, null, _$$12.h1), "Explicit")), _$$12.h2)); } break; } case "Nil": return Lib_Types_error(null, _8, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(_9))(" is not a field of "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_4)))("")); } }; +const Lib_Elab_updateRec_doClause = ( _, _1, _2, _3, _4, _5, _$$6, _$$7 ) => { switch (_$$7.tag) { case "ModifyField": return Lib_Elab_updateRec_doClause_go(_, _1, _2, _3, _4, _5, _$$6, _$$7, _$$7.h0, _$$7.h1, _$$7.h2, null, _$$6); case "AssignField": return Lib_Elab_updateRec_doClause_go$27(_, _1, _2, _3, _4, _5, _$$6, _$$7, _$$7.h0, _$$7.h1, _$$7.h2, null, _$$6); } }; +const Lib_Elab_updateRec_doClause_collect = ( _, _1, _2, _3, _4, _5, _6, _$$7, _$$8 ) => { switch (_$$8.tag) { case "Pi": return Prelude__$3A$3A_(null, Prelude__$2C_(null, null, _$$8.h1, Lib_Syntax_RApp(_1, Lib_Syntax_RVar(_1, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(".")(_$$8.h1)), _$$7, "Explicit")), Lib_Elab_updateRec_doClause_collect(_, _1, _2, _3, _4, _5, _6, _$$7, _$$8.h5)); default: return Prelude_Nil(null); } }; +const Lib_Elab_REC_updateRec_doClause_collect_getTele = ( arg ) => { const _sc$$0 = arg.h9; switch (_sc$$0.tag) { case "VPi": { const _sc$$1 = arg.h8; switch (_sc$$1.tag) { case "Nothing": return { tag: "Lib.Elab.updateRec.doClause.collect.getTele", h0: arg.h0, h1: arg.h1, h2: arg.h2, h3: arg.h3, h4: arg.h4, h5: arg.h5, h6: arg.h6, h7: arg.h7, h8: Prelude_Just(null, Lib_Syntax_RVar(arg.h1, "$ru")), h9: _sc$$0.h4 }; default: return { tag: "return", h0: Lib_Types_error(null, Lib_Common_getFC(null, Lib_Types_Lib_Common_HasFC$20Lib_Types_Val)(arg.h9), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected a record type, got ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(arg.h9)))("")) }; } break; } case "VRef": { const _sc$$1 = arg.h8; switch (_sc$$1.tag) { case "Nothing": return { tag: "return", h0: Lib_Types_error(null, Lib_Common_getFC(null, Lib_Types_Lib_Common_HasFC$20Lib_Types_Val)(arg.h9), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected a pi type, got ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(arg.h9)))("")) }; case "Just": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => { const sc$$16 = Lib_TopContext_lookup(_sc$$0.h1, top); switch (sc$$16.tag) { case "Just": { const _sc$$2 = sc$$16.h1; const _sc$$3 = _sc$$2.h3; switch (_sc$$3.tag) { case "TCon": { const _sc$$4 = _sc$$3.h1; switch (_sc$$4.tag) { case "_::_": { const _sc$$5 = _sc$$4.h2; switch (_sc$$5.tag) { case "Nil": { const sc$$30 = Lib_TopContext_lookup(_sc$$4.h1, top); switch (sc$$30.tag) { case "Just": { const _sc$$6 = sc$$30.h1; const _sc$$7 = _sc$$6.h3; switch (_sc$$7.tag) { case "DCon": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, _sc$$4.h1, Lib_Elab_updateRec_doClause_collect(arg.h0, arg.h1, arg.h2, arg.h3, arg.h4, arg.h5, arg.h6, _sc$$1.h1, _sc$$6.h2))); default: return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_sc$$4.h1)))(" not a dcon")); } break; } default: return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_sc$$4.h1)))(" not a dcon")); } break; } default: return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_sc$$0.h1)))(" is not a record")); } break; } default: return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_sc$$0.h1)))(" is not a record")); } break; } default: return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_sc$$0.h1)))(" is not a record")); } break; } default: return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_QName)(_sc$$0.h1)))(" not in scope")); } }) }; } break; } default: { const _sc$$1 = arg.h8; switch (_sc$$1.tag) { case "Nothing": return { tag: "return", h0: Lib_Types_error(null, Lib_Common_getFC(null, Lib_Types_Lib_Common_HasFC$20Lib_Types_Val)(arg.h9), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected a pi type, got ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(arg.h9)))("")) }; default: return { tag: "return", h0: Lib_Types_error(null, Lib_Common_getFC(null, Lib_Types_Lib_Common_HasFC$20Lib_Types_Val)(arg.h9), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected a record type, got ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(arg.h9)))("")) }; } break; } } }; +const Lib_Elab_updateRec_doClause_collect_getTele = ( _, _1, _2, _3, _4, _5, _6, _7, _$$8, _$$9 ) => (bouncer(Lib_Elab_REC_updateRec_doClause_collect_getTele, { tag: "Lib.Elab.updateRec.doClause.collect.getTele", h0: _, h1: _1, h2: _2, h3: _3, h4: _4, h5: _5, h6: _6, h7: _7, h8: _$$8, h9: _$$9 })); +const Lib_Elab_updateRec = ( _$$0, _$$1, _$$2, _$$3, _$$4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_updateRec_doClause_collect_getTele(_$$0, _$$1, _$$2, _$$3, _$$4, null, null, null, _$$3, _$$4), ( $$sc ) => { const _sc$$0 = $$sc.h2; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_foldlM(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, ( eta ) => (( eta1 ) => (Lib_Elab_updateRec_doClause(_$$0, _$$1, _$$2, _$$3, _$$4, null, eta, eta1))), $$sc.h3, _$$2), ( args$27 ) => { const tm = Prelude_foldl(null, null, ( acc ) => (( tm ) => (Lib_Syntax_RApp(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(tm), acc, tm, "Explicit"))), Lib_Syntax_RVar(_$$1, _sc$$0.h1), Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_snd(null, null, eta)))(args$27)); let tm1; switch (_$$3.tag) { case "Nothing": { tm1 = Lib_Syntax_RLam(_$$1, Lib_Types_BI(_$$1, "$ru", "Explicit", "Many"), tm); break; } case "Just": { tm1 = tm; break; } } return Lib_Elab_check(_$$0, tm1, _$$4); }); })); +const Lib_Elab_check = ( _$$0, _$$1, _$$2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_forceType(Lib_Types__env(_$$0), _$$2), ( ty$27 ) => { const sc$$4 = Prelude__$2C_(null, null, _$$1, ty$27); const _sc$$0 = sc$$4.h2; switch (_sc$$0.tag) { case "RUpdateRec": return Lib_Elab_updateRec(_$$0, _sc$$0.h0, _sc$$0.h1, _sc$$0.h2, sc$$4.h3); case "RWhere": return Lib_Elab_checkWhere(_$$0, Lib_Elab_collectDecl(_sc$$0.h1), _sc$$0.h2, sc$$4.h3); case "RIf": { const tm$27 = Lib_Syntax_RCase(_sc$$0.h0, _sc$$0.h1, Prelude__$3A$3A_(null, Lib_Syntax_MkAlt(Lib_Syntax_RVar(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_sc$$0.h2), "True"), _sc$$0.h2), Prelude__$3A$3A_(null, Lib_Syntax_MkAlt(Lib_Syntax_RVar(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_sc$$0.h3), "False"), _sc$$0.h3), Prelude_Nil(null)))); return Lib_Elab_check(_$$0, tm$27, sc$$4.h3); break; } case "RDo": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_undo(_sc$$0.h0, _sc$$0.h1), ( stmts$27 ) => (Lib_Elab_check(_$$0, stmts$27, sc$$4.h3))); case "RHole": return Lib_Elab_freshMeta(_$$0, _sc$$0.h0, sc$$4.h3, "User"); case "RImplicit": return Lib_Elab_freshMeta(_$$0, _sc$$0.h0, sc$$4.h3, "Normal"); case "RCase": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, _sc$$0.h1), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_forceMeta($$sc.h3), ( scty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("SCTM ")(Lib_Elab_rpprint(Lib_Types_names(_$$0), $$sc.h2)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _1 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("SCTY ")(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(scty)))(""))), ( _1 ) => { const scnm = Lib_Elab_fresh(_$$0, "sc"); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, _sc$$0.h2, ( $$case ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_mkPat(Prelude__$2C_(null, null, $$case.h0, "Explicit")), ( pat$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Syntax_MkClause(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)($$case.h0), Prelude__$3A$3A_(null, Prelude__$2C_(null, null, scnm, pat$27), Prelude_Nil(null)), Prelude_Nil(null), $$case.h1)))))), ( clauses ) => { const ctx$27 = Lib_Types_withPos(Lib_Types_extend(_$$0, scnm, scty), Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$1)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_buildTree(ctx$27, Lib_Elab_MkProb(clauses, sc$$4.h3)), ( tree ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Let(_sc$$0.h0, scnm, $$sc.h2, tree)))); }))); }))))))); case "RLet": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _sc$$0.h2, Lib_Types_VU(Lib_Common_emptyFC)), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", ty$271), ( vty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(_$$0, _sc$$0.h3, vty), ( v$27 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_eval(Lib_Types__env(_$$0), "CBN", v$27), ( vv ) => { const ctx$27 = Lib_Types_define(_$$0, _sc$$0.h1, vv, vty); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(ctx$27, _sc$$0.h4, sc$$4.h3), ( sc$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Let(_sc$$0.h0, _sc$$0.h1, v$27, sc$27)))); }))))))); case "RLam": { const _sc$$1 = _sc$$0.h1; const _sc$$2 = sc$$4.h3; switch (_sc$$2.tag) { case "VPi": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("icits ")(_sc$$1.h1))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_sc$$1.h2)))(" "))(_sc$$2.h1))(" "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Icit)(_sc$$2.h2)))(""))), ( _ ) => { const sc$$23 = Prelude__$3D$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit)(_sc$$1.h2)(_sc$$2.h2); switch (sc$$23) { case "False": { const sc$$24 = Prelude__$2F$3D_(null, Lib_Types_Prelude_Eq$20Lib_Types_Icit, _sc$$2.h2, "Explicit"); switch (sc$$24) { case "False": return Lib_Types_error(null, _sc$$0.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Icity issue checking ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" at "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(sc$$4.h3)))("")); case "True": { const $var = Lib_Types_VVar(_sc$$0.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$2.h5, $var), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$2.h1, _sc$$2.h4), sc$$4.h2, ty$271), ( sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(_sc$$0.h0, _sc$$2.h1, _sc$$1.h2, _sc$$2.h3, sc)))))); break; } } break; } case "True": { const $var = Lib_Types_VVar(_sc$$0.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); const ctx$27 = Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$2.h4); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$2.h5, $var), ( bapp ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(ctx$27, _sc$$0.h2, bapp), ( tm$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(_sc$$0.h0, _sc$$1.h1, _sc$$1.h2, _sc$$2.h3, tm$27)))))); break; } } }); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_prvalCtx(_$$0, sc$$4.h3), ( pty ) => (Lib_Types_error(null, _sc$$1.h0, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected pi type, got ")(pty))("")))); } break; } default: { const _sc$$1 = sc$$4.h3; switch (_sc$$1.tag) { case "VPi": { const _sc$$2 = _sc$$1.h2; switch (_sc$$2) { case "Auto": { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX edge case add auto lambda {")(_sc$$1.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_sc$$1.h4)))("} to "))(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" "))), ( _ ) => { const $var = Lib_Types_VVar(_sc$$1.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$1.h5, $var), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debugM(Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_prvalCtx(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), ty$271), ( pty$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX ty' is ")(pty$27))(""))))), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), sc$$4.h2, ty$271), ( sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _sc$$1.h1, "Auto", _sc$$1.h3, sc)))))))); }); break; } case "Implicit": { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX edge case add implicit lambda {")(_sc$$1.h1))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(_sc$$1.h4)))("} to "))(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" "))), ( _ ) => { const $var = Lib_Types_VVar(_sc$$1.h0, Prelude_length$27(null, Lib_Types__env(_$$0)), Prelude_Lin(null)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval__$$$$_(_sc$$1.h5, $var), ( ty$271 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debugM(Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Eval_prvalCtx(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), ty$271), ( pty$27 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("XXX ty' is ")(pty$27))(""))))), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_check(Lib_Types_extend(_$$0, _sc$$1.h1, _sc$$1.h4), sc$$4.h2, ty$271), ( sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Lib_Types_Lam(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _sc$$1.h1, "Implicit", _sc$$1.h3, sc)))))))); }); break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, sc$$4.h2), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_insert(_$$0, $$sc.h2, $$sc.h3), ( $$sc1 ) => { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("INFER ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" to ("))(Lib_Elab_rpprint(names, $$sc1.h2)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)($$sc1.h3)))(") expect "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(sc$$4.h3)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _$$0, $$sc1.h3, sc$$4.h3), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc1.h2))))); }))); } break; } default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_infer(_$$0, sc$$4.h2), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_insert(_$$0, $$sc.h2, $$sc.h3), ( $$sc1 ) => { const names = Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Prelude_fst(null, null, eta)))(Lib_Types__types(_$$0)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_debug(( _ ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("INFER ")(Prelude_show(null, Lib_Syntax_Prelude_Show$20Lib_Syntax_Raw)(sc$$4.h2)))(" to ("))(Lib_Elab_rpprint(names, $$sc1.h2)))(" : "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)($$sc1.h3)))(") expect "))(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Val)(sc$$4.h3)))(""))), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Elab_unifyCatch(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$4.h2), _$$0, $$sc1.h3, sc$$4.h3), ( _1 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc1.h2))))); }))); } break; } } })); const Lib_Util_MkBinder = ( h0, h1, h2, h3, h4 ) => ({ tag: "MkBinder", h0: h0, h1: h1, h2: h2, h3: h3, h4: h4 }); const Lib_Util_REC_splitTele_go = ( arg ) => { const _sc$$0 = arg.h2; switch (_sc$$0.tag) { case "Pi": return { tag: "Lib.Util.splitTele.go", h0: arg.h0, h1: Prelude__$3A$3A_(null, Lib_Util_MkBinder(_sc$$0.h0, _sc$$0.h1, _sc$$0.h2, _sc$$0.h3, _sc$$0.h4), arg.h1), h2: _sc$$0.h5 }; default: return { tag: "return", h0: Prelude__$2C_(null, null, arg.h2, Prelude_reverse(null)(arg.h1)) }; } }; const Lib_Util_splitTele_go = ( _, _$$1, _$$2 ) => (bouncer(Lib_Util_REC_splitTele_go, { tag: "Lib.Util.splitTele.go", h0: _, h1: _$$1, h2: _$$2 })); @@ -915,7 +960,7 @@ const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Types_Literal$2Cpretty = ( _$$0 ) => const Lib_Prettier_MkPretty = ( h0, h1 ) => ({ tag: "MkPretty", h0: h0, h1: h1 }); const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Types_Literal = Lib_Prettier_MkPretty(null, Lib_Syntax_Lib_Prettier_Pretty$20Lib_Types_Literal$2Cpretty); const Lib_Prettier_pretty = ( a$$0, _$$1 ) => (_$$1.h1); -const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc = ( _, _1, _2, _$$3, _$$4 ) => { switch (_$$4.tag) { case "RAs": return Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Prettier_text(_$$4.h1))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Prettier_text("@("))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))(Lib_Prettier_text(")")))); case "RWhere": return Lib_Prettier_text("TODO pretty where"); case "RIf": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 0, Lib_Prettier__$3C$2B$2F$3E_(Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("if"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h1)), Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("then"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))), Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("else"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h3)))); case "RDo": return Lib_Prettier_text("TODO - RDo"); case "RHole": return Lib_Prettier_text("?"); case "RImplicit": return Lib_Prettier_text("_"); case "RCase": return Lib_Prettier_text("TODO - RCase"); case "RLit": return Lib_Prettier_pretty(null, Lib_Syntax_Lib_Prettier_Pretty$20Lib_Types_Literal)(_$$4.h1); case "RAnn": return Lib_Prettier_text("TODO - RAnn"); case "RLet": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 0, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("let"))(Lib_Prettier_text(_$$4.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h3)))(Lib_Prettier_text("=")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2)), Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("in"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h4)))); case "RPi": { const _sc$$0 = _$$4.h1; const _sc$$1 = _sc$$0.h1; switch (_sc$$1) { case "_": { const _sc$$2 = _sc$$0.h2; switch (_sc$$2) { case "Explicit": { const _sc$$3 = _sc$$0.h3; switch (_sc$$3) { case "Many": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h3))); default: return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_sc$$0.h3))(_sc$$0.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 1, _$$4.h3))); } break; } default: return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_sc$$0.h3))(_sc$$0.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 1, _$$4.h3))); } break; } default: return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_sc$$0.h3))(_sc$$0.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 1, _$$4.h3))); } break; } case "RU": return Lib_Prettier_text("U"); case "RApp": { const _sc$$0 = _$$4.h3; switch (_sc$$0) { case "Auto": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 2, Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 2, _$$4.h1))(Lib_Prettier_text("{{")))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))(Lib_Prettier_text("}}")))); case "Explicit": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 2, _$$4.h1))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 3, _$$4.h2))); case "Implicit": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 2, Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 2, _$$4.h1))(Lib_Prettier_text("{")))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))(Lib_Prettier_text("}")))); } break; } case "RLam": { const _sc$$0 = _$$4.h1; return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 0, Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Prettier_text("\\"))(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Lib_Prettier_text(_sc$$0.h1)))(Lib_Prettier_text("=>")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2)))); break; } case "RVar": return Lib_Prettier_text(_$$4.h1); } }; +const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc = ( _, _1, _2, _$$3, _$$4 ) => { switch (_$$4.tag) { case "RUpdateRec": return Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("{"))(Lib_Prettier_text("TODO RUpdateRec")))(Lib_Prettier_text("}")); case "RAs": return Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Prettier_text(_$$4.h1))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Prettier_text("@("))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))(Lib_Prettier_text(")")))); case "RWhere": return Lib_Prettier_text("TODO pretty where"); case "RIf": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 0, Lib_Prettier__$3C$2B$2F$3E_(Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("if"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h1)), Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("then"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))), Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("else"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h3)))); case "RDo": return Lib_Prettier_text("TODO - RDo"); case "RHole": return Lib_Prettier_text("?"); case "RImplicit": return Lib_Prettier_text("_"); case "RCase": return Lib_Prettier_text("TODO - RCase"); case "RLit": return Lib_Prettier_pretty(null, Lib_Syntax_Lib_Prettier_Pretty$20Lib_Types_Literal)(_$$4.h1); case "RAnn": return Lib_Prettier_text("TODO - RAnn"); case "RLet": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 0, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("let"))(Lib_Prettier_text(_$$4.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h3)))(Lib_Prettier_text("=")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2)), Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text("in"))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h4)))); case "RPi": { const _sc$$0 = _$$4.h1; const _sc$$1 = _sc$$0.h1; switch (_sc$$1) { case "_": { const _sc$$2 = _sc$$0.h2; switch (_sc$$2) { case "Explicit": { const _sc$$3 = _sc$$0.h3; switch (_sc$$3) { case "Many": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h3))); default: return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_sc$$0.h3))(_sc$$0.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 1, _$$4.h3))); } break; } default: return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_sc$$0.h3))(_sc$$0.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 1, _$$4.h3))); } break; } default: return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 1, Lib_Prettier__$3C$2B$2F$3E_(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_text(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_show(null, Lib_Types_Prelude_Show$20Lib_Types_Quant)(_sc$$0.h3))(_sc$$0.h1)))(Lib_Prettier_text(":")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, _$$3, _$$4.h2))))(Lib_Prettier_text("->")), Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 1, _$$4.h3))); } break; } case "RU": return Lib_Prettier_text("U"); case "RApp": { const _sc$$0 = _$$4.h3; switch (_sc$$0) { case "Auto": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 2, Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 2, _$$4.h1))(Lib_Prettier_text("{{")))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))(Lib_Prettier_text("}}")))); case "Explicit": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 2, Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 2, _$$4.h1))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 3, _$$4.h2))); case "Implicit": return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 2, Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 2, _$$4.h1))(Lib_Prettier_text("{")))(Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2))(Lib_Prettier_text("}")))); } break; } case "RLam": { const _sc$$0 = _$$4.h1; return Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par(_, _1, _$$3, 0, Prelude__$2B$2B_(null, Lib_Prettier_Prelude_Concat$20Lib_Prettier_Doc)(Lib_Prettier_text("\\"))(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Syntax_wrap(_sc$$0.h2, Lib_Prettier_text(_sc$$0.h1)))(Lib_Prettier_text("=>")))(Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(_, _1, _2, 0, _$$4.h2)))); break; } case "RVar": return Lib_Prettier_text(_$$4.h1); } }; const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty = ( eta ) => (Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty_bindDoc_par_asDoc(null, null, null, 0, eta)); const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw = Lib_Prettier_MkPretty(null, Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw$2Cpretty); const Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Decl$2Cpretty_prettyPair = ( _, _1, _2, _3, _4, _$$5 ) => (Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Prelude__$3C$2B$3E_(null, Lib_Prettier_Prelude_Semigroup$20Lib_Prettier_Doc)(Lib_Prettier_pretty(null, Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw)(_$$5.h2))(Lib_Prettier_text("=")))(Lib_Prettier_pretty(null, Lib_Syntax_Lib_Prettier_Pretty$20Lib_Syntax_Raw)(_$$5.h3))); @@ -1031,22 +1076,28 @@ const Lib_Parser_REC_pratt_projectHead = ( arg ) => { const _sc$$0 = arg.h7; swi const Lib_Parser_pratt_projectHead = ( _, _1, _2, _3, _4, _5, _$$6, _$$7 ) => (bouncer(Lib_Parser_REC_pratt_projectHead, { tag: "Lib.Parser.pratt.projectHead", h0: _, h1: _1, h2: _2, h3: _3, h4: _4, h5: _5, h6: _$$6, h7: _$$7 })); const Lib_Parser_pratt_projectHead_runProject_runRule_runPrefix = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _$$9, _$$10, _$$11 ) => { switch (_$$10.tag) { case "RVar": { const sc$$14 = Data_SortedMap_lookupMap$27(null, null, Prelude_Prelude_Ord$20Prim_String, _$$10.h1, _); switch (sc$$14.tag) { case "Just": { const _sc$$0 = sc$$14.h1; const _sc$$1 = _sc$$0.h3; switch (_sc$$1) { case "True": return Lib_Parser_pratt_projectHead_runProject_runRule(_, _1, _2, _3, _4, _5, _6, _7, _sc$$0.h1, _sc$$0.h2, _$$9, _sc$$0.h4, Lib_Syntax_RVar(_$$10.h0, _sc$$0.h0), _$$11); default: return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$2C_(null, null, _3, _$$11)); } break; } default: return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$2C_(null, null, _3, _$$11)); } break; } default: return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$2C_(null, null, _$$10, _$$11)); } }; const Lib_Parser_pratt = ( _$$0, _$$1, _$$2, _$$3, _$$4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_pratt_projectHead_runProject_runRule_runPrefix(_$$0, _$$1, _$$2, _$$3, _$$4, null, null, null, null, _$$2, _$$3, _$$4), ( $$sc ) => { const sc$$15 = Lib_Parser_pratt_projectHead(_$$0, _$$1, _$$2, _$$3, _$$4, null, $$sc.h2, $$sc.h3); const spine = Lib_Parser_pratt_projectHead_runProject(_$$0, _$$1, _$$2, _$$3, _$$4, null, null, sc$$15.h3); switch (spine.tag) { case "_::_": { const _sc$$0 = spine.h1; const _sc$$1 = _sc$$0.h2; switch (_sc$$1) { case "Explicit": { const _sc$$2 = _sc$$0.h3; const _sc$$3 = _sc$$2.h3; switch (_sc$$3.tag) { case "RVar": { const sc$$35 = Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(_sc$$3.h1)(_$$2); switch (sc$$35) { case "False": { const sc$$36 = Data_SortedMap_lookupMap$27(null, null, Prelude_Prelude_Ord$20Prim_String, _sc$$3.h1, _$$0); switch (sc$$36.tag) { case "Nothing": { const sc$$38 = Prelude_isPrefixOf(".", _sc$$3.h1); switch (sc$$38) { case "False": return Lib_Parser_pratt(_$$0, _$$1, _$$2, Lib_Syntax_RApp(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$15.h2), sc$$15.h2, _sc$$2.h3, "Explicit"), spine.h2); case "True": return Lib_Parser_pratt(_$$0, _$$1, _$$2, Lib_Syntax_RApp(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_sc$$2.h3), _sc$$2.h3, sc$$15.h2, "Explicit"), spine.h2); } break; } case "Just": { const _sc$$4 = sc$$36.h1; const _sc$$5 = _sc$$4.h3; switch (_sc$$5) { case "False": { const sc$$44 = Prelude__$3C_(null, Prelude_Prelude_Ord$20Prim_Int, _sc$$4.h1, _$$1); switch (sc$$44) { case "False": return Lib_Parser_pratt_projectHead_runProject_runRule(_$$0, _$$1, _$$2, _$$3, _$$4, null, null, null, _sc$$4.h1, _sc$$4.h2, _$$2, _sc$$4.h4, Lib_Syntax_RApp(_sc$$2.h2, Lib_Syntax_RVar(_sc$$2.h2, _sc$$4.h0), sc$$15.h2, "Explicit"), spine.h2); case "True": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$2C_(null, null, sc$$15.h2, spine)); } break; } default: return Lib_Parser_Impl_fail(null, "expected operator"); } break; } } break; } case "True": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$2C_(null, null, sc$$15.h2, spine)); } break; } default: return Lib_Parser_pratt(_$$0, _$$1, _$$2, Lib_Syntax_RApp(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$15.h2), sc$$15.h2, _sc$$2.h3, _sc$$0.h2), spine.h2); } break; } default: { const _sc$$2 = _sc$$0.h3; return Lib_Parser_pratt(_$$0, _$$1, _$$2, Lib_Syntax_RApp(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(sc$$15.h2), sc$$15.h2, _sc$$2.h3, _sc$$0.h2), spine.h2); break; } } break; } case "Nil": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$2C_(null, null, sc$$15.h2, Prelude_Nil(null))); } })); -const Lib_Parser_dbraces = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("{{"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( t ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("}}"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(t)))))))); -const Lib_Parser_braces = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("{"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( t ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("}"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(t)))))))); -const Lib_Parser_parenWrap = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("("), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( t ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol(")"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(t)))))))); +const Lib_Syntax_RUpdateRec = ( h0, h1, h2 ) => ({ tag: "RUpdateRec", h0: h0, h1: h1, h2: h2 }); +const Lib_Syntax_ModifyField = ( h0, h1, h2 ) => ({ tag: "ModifyField", h0: h0, h1: h1, h2: h2 }); +const Lib_Syntax_AssignField = ( h0, h1, h2 ) => ({ tag: "AssignField", h0: h0, h1: h1, h2: h2 }); +const Prelude__$3C$$_ = ( f$$0, a$$1, b$$2, _$$3, _$$4, _$$5 ) => (Prelude__$3C$$$3E_(null, _$$3, null, null, ( eta ) => (Prelude_const(null, null, _$$4, eta)), _$$5)); +const Lib_Parser_Impl_token$27 = ( _$$0 ) => (Lib_Parser_Impl_satisfy(( t ) => (Prelude__$3D$3D_(null, Lib_Token_Prelude_Eq$20Lib_Token_Kind)(Lib_Token__kind(Lib_Token__val(null, t)))(_$$0)), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected a ")(Prelude_show(null, Lib_Token_Prelude_Show$20Lib_Token_Kind)(_$$0)))(" token"))); +const Lib_Parser_Impl_token = ( eta ) => (Prelude__$2218_(null, null, null, ( eta ) => (Lib_Parser_Impl_indented(null, eta)), Lib_Parser_Impl_token$27, eta)); +const Lib_Parser_ident = Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_Impl_token("Ident"))(Lib_Parser_Impl_token("MixFix")); const Lib_Parser_Impl_getPos = Lib_Parser_Impl_P(null, ( toks ) => (( com ) => (( ops ) => (( indent ) => { switch (toks.tag) { case "_::_": return Lib_Parser_Impl_OK(null, Lib_Common_MkFC(Lib_Common__file(indent), Lib_Token_getStart(toks.h1)), toks, com, ops); case "Nil": return Lib_Parser_Impl_OK(null, Lib_Common_emptyFC, toks, com, ops); } })))); +const Lib_Parser_updateClause = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_ident, ( nm ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$$_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, "True", Lib_Parser_Impl_symbol(":=")))(Prelude__$3C$$_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, "False", Lib_Parser_Impl_symbol("$="))), ( op ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_term, ( tm ) => { switch (op) { case "True": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_AssignField(fc, nm, tm)); default: return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_ModifyField(fc, nm, tm)); } }))))))); +const Lib_Parser_Impl_some = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( x ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_many(null, _$$1), ( xs ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$3A$3A_(null, x, xs))))))); +const Lib_Parser_Impl_many = ( a$$0, _$$1 ) => (Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_Impl_some(null, _$$1))(Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude_Nil(null)))); +const Lib_Parser_Impl_sepBy = ( s$$0, a$$1, _$$2, _$$3 ) => (Prelude__$3C$2A$3E_(null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser)(null)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (( eta1 ) => (Prelude__$3A$3A_(null, eta, eta1))), _$$3))(Lib_Parser_Impl_many(null, Prelude__$2A$3E_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, _$$2, _$$3)))); +const Lib_Parser_recordUpdate = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("["), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_sepBy(null, null, Lib_Parser_Impl_symbol(";"), Lib_Parser_updateClause), ( clauses ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("]"), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_optional(null, Lib_Parser_atom), ( tm ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_RUpdateRec(fc, clauses, tm)))))))))))); +const Lib_Parser_parenWrap = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("("), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( t ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol(")"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(t)))))))); const Lib_Syntax_RHole = ( h0 ) => ({ tag: "RHole", h0: h0 }); const Prelude__$3C$2A_ = ( f$$0, a$$1, b$$2, _$$3, _$$4, _$$5 ) => (Prelude__$3C$2A$3E_(null, _$$3)(null)(null)(Prelude__$3C$2A$3E_(null, _$$3)(null)(null)(Prelude_return(null, _$$3)(null)(( eta ) => (( eta1 ) => (Prelude_const(null, null, eta, eta1)))))(_$$4))(_$$5)); const Prelude_strIndex = (s, ix) => s[ix]; const Lib_Syntax_RLit = ( h0, h1 ) => ({ tag: "RLit", h0: h0, h1: h1 }); -const Lib_Parser_Impl_token$27 = ( _$$0 ) => (Lib_Parser_Impl_satisfy(( t ) => (Prelude__$3D$3D_(null, Lib_Token_Prelude_Eq$20Lib_Token_Kind)(Lib_Token__kind(Lib_Token__val(null, t)))(_$$0)), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Expected a ")(Prelude_show(null, Lib_Token_Prelude_Show$20Lib_Token_Kind)(_$$0)))(" token"))); -const Lib_Parser_Impl_token = ( eta ) => (Prelude__$2218_(null, null, null, ( eta ) => (Lib_Parser_Impl_indented(null, eta)), Lib_Parser_Impl_token$27, eta)); const Lib_Parser_charLit = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_token("Character"), ( v ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_RLit(fc, Lib_Types_LChar(Prelude_strIndex(v, 0)))))))); const Lib_Parser_stringLit = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_token("StringKind"), ( t ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_RLit(fc, Lib_Types_LString(t))))))); const Lib_Parser_interpString_append = ( _, _$$1, _$$2 ) => { const fc = Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$1); return Lib_Syntax_RApp(Lib_Common_getFC(null, Lib_Syntax_Lib_Common_HasFC$20Lib_Syntax_Raw)(_$$1), Lib_Syntax_RApp(fc, Lib_Syntax_RVar(fc, "_++_"), _$$1, "Explicit"), _$$2, "Explicit"); }; const Lib_Parser_interp = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_token("StartInterp"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_term, ( tm ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_token("EndInterp"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(tm))))))); -const Lib_Parser_Impl_some = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( x ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_many(null, _$$1), ( xs ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude__$3A$3A_(null, x, xs))))))); -const Lib_Parser_Impl_many = ( a$$0, _$$1 ) => (Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_Impl_some(null, _$$1))(Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude_Nil(null)))); const Lib_Parser_interpString = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Prelude_ignore(null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser)(Lib_Parser_Impl_token("StartQuote")), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_term, ( part ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_many(null, Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_stringLit)(Lib_Parser_interp)), ( parts ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Prelude_ignore(null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser)(Lib_Parser_Impl_token("EndQuote")), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude_foldl(null, null, ( eta ) => (( eta1 ) => (Lib_Parser_interpString_append(null, eta, eta1))), part, parts)))))))))); const Prelude_stringToInt = (s) => { let rval = Number(s) @@ -1057,10 +1108,11 @@ const Lib_Parser_intLit = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_ const Lib_Parser_lit = Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_intLit)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_interpString)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_stringLit)(Lib_Parser_charLit))); const Lib_Parser_uident = Lib_Parser_Impl_token("UIdent"); const Lib_Syntax_RAs = ( h0, h1, h2 ) => ({ tag: "RAs", h0: h0, h1: h1, h2: h2 }); -const Lib_Parser_ident = Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_Impl_token("Ident"))(Lib_Parser_Impl_token("MixFix")); const Lib_Parser_asAtom = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_ident, ( nm ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_optional(null, Prelude__$2A$3E_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("@"), Lib_Parser_parenWrap(null, Lib_Parser_typeExpr))), ( asPat ) => { switch (asPat.tag) { case "Nothing": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_RVar(fc, nm)); case "Just": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_RAs(fc, nm, asPat.h1)); } }))))); -const Lib_Parser_atom = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)("MkUnit"), ( _ ) => (Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, Lib_Syntax_RU, Lib_Parser_Impl_getPos), Lib_Parser_Impl_keyword("U")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_asAtom)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A$3E_(null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser)(null)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (( eta1 ) => (Lib_Syntax_RVar(eta, eta1))), Lib_Parser_Impl_getPos))(Lib_Parser_uident))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A$3E_(null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser)(null)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (( eta1 ) => (Lib_Syntax_RVar(eta, eta1))), Lib_Parser_Impl_getPos))(Lib_Parser_Impl_token("Projection")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_lit)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, Lib_Syntax_RImplicit, Lib_Parser_Impl_getPos), Lib_Parser_Impl_keyword("_")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, Lib_Syntax_RHole, Lib_Parser_Impl_getPos), Lib_Parser_Impl_keyword("?")))(Lib_Parser_parenWrap(null, Lib_Parser_typeExpr)))))))))); -const Lib_Parser_pArg = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( x ) => (Prelude__$2C_(null, null, "Explicit", Prelude__$2C_(null, null, fc, x))), Lib_Parser_atom))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( x ) => (Prelude__$2C_(null, null, "Implicit", Prelude__$2C_(null, null, fc, x))), Lib_Parser_braces(null, Lib_Parser_typeExpr)))(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( x ) => (Prelude__$2C_(null, null, "Auto", Prelude__$2C_(null, null, fc, x))), Lib_Parser_dbraces(null, Lib_Parser_typeExpr)))))); +const Lib_Parser_atom = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)("MkUnit"), ( _ ) => (Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, Lib_Syntax_RU, Lib_Parser_Impl_getPos), Lib_Parser_Impl_keyword("U")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_asAtom)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A$3E_(null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser)(null)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (( eta1 ) => (Lib_Syntax_RVar(eta, eta1))), Lib_Parser_Impl_getPos))(Lib_Parser_uident))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A$3E_(null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser)(null)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (( eta1 ) => (Lib_Syntax_RVar(eta, eta1))), Lib_Parser_Impl_getPos))(Lib_Parser_Impl_token("Projection")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_lit)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, Lib_Syntax_RImplicit, Lib_Parser_Impl_getPos), Lib_Parser_Impl_keyword("_")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, Lib_Syntax_RHole, Lib_Parser_Impl_getPos), Lib_Parser_Impl_keyword("?")))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_parenWrap(null, Lib_Parser_typeExpr))(Lib_Parser_recordUpdate)))))))))); +const Lib_Parser_dbraces = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("{{"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( t ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("}}"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(t)))))))); +const Lib_Parser_braces = ( a$$0, _$$1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("{"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, _$$1, ( t ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("}"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(t)))))))); +const Lib_Parser_pArg = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( x ) => (Prelude__$2C_(null, null, "Implicit", Prelude__$2C_(null, null, fc, x))), Lib_Parser_braces(null, Lib_Parser_typeExpr)))(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( x ) => (Prelude__$2C_(null, null, "Auto", Prelude__$2C_(null, null, fc, x))), Lib_Parser_dbraces(null, Lib_Parser_typeExpr)))(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( x ) => (Prelude__$2C_(null, null, "Explicit", Prelude__$2C_(null, null, fc, x))), Lib_Parser_atom))))); const Lib_Parser_Impl_getOps = Lib_Parser_Impl_P(null, ( toks ) => (( com ) => (( ops ) => (( col ) => (Lib_Parser_Impl_OK(null, ops, toks, com, ops)))))); const Lib_Parser_parseOp = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getOps, ( ops ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_atom, ( hd ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_many(null, Lib_Parser_pArg), ( rest ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_pratt(ops, 0, "", hd, rest), ( $$sc ) => { const _sc$$0 = $$sc.h3; switch (_sc$$0.tag) { case "Nil": return Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)($$sc.h2); default: return Lib_Parser_Impl_fail(null, "extra stuff"); } }))))))))); const Lib_Syntax_RIf = ( h0, h1, h2, h3 ) => ({ tag: "RIf", h0: h0, h1: h1, h2: h2, h3: h3 }); @@ -1100,7 +1152,6 @@ const Lib_Parser_varname = Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alt const Lib_Parser_forAll = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_Impl_keyword("forall"))(Lib_Parser_Impl_keyword("∀")), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_some(null, Lib_Parser_addPos(null, Lib_Parser_varname)), ( all ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("."), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_typeExpr, ( scope ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude_foldr(null, null, ( eta ) => (( eta1 ) => (Lib_Parser_forAll_mkPi(null, eta, eta1))), scope, all)))))))))); const Lib_Parser_binders_mkBind = ( _, _$$1, _$$2 ) => (Lib_Syntax_RPi(Lib_Common_getFC(null, Lib_Types_Lib_Common_HasFC$20Lib_Types_BindInfo)(_$$1.h2), _$$1.h2, _$$1.h3, _$$2)); const Lib_Parser_ebind_makeBind = ( _, _$$1, _$$2, _$$3 ) => (Prelude__$2C_(null, null, Lib_Types_BI(_$$3.h2, _$$3.h3, "Explicit", _$$1), _$$2)); -const Prelude__$3C$$_ = ( f$$0, a$$1, b$$2, _$$3, _$$4, _$$5 ) => (Prelude__$3C$$$3E_(null, _$$3, null, null, ( eta ) => (Prelude_const(null, null, _$$4, eta)), _$$5)); const Lib_Parser_quantity = Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (Prelude_fromMaybe(null, "Many", eta)), Lib_Parser_optional(null, Prelude__$3C$$_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, "Zero", Lib_Parser_Impl_keyword("0")))); const Lib_Parser_ebind = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol("("), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_quantity, ( quant ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_try(null, Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_some(null, Lib_Parser_addPos(null, Lib_Parser_varname)), Lib_Parser_Impl_symbol(":"))), ( $$sc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_typeExpr, ( ty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_symbol(")"), ( _1 ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Prelude_map(null, Prelude_Prelude_Functor$20Prelude_List)(null)(null)(( eta ) => (Lib_Parser_ebind_makeBind(null, quant, ty, eta)))($$sc)))))))))))); const Lib_Parser_ibind_makeBind = ( _, _$$1, _$$2, _$$3 ) => (Prelude__$2C_(null, null, Lib_Types_BI(_$$3.h2, _$$3.h3, "Implicit", _$$1), Prelude_fromMaybe(null, Lib_Syntax_RImplicit(_$$3.h2), _$$2))); @@ -1121,7 +1172,6 @@ const Lib_Parser_parseInstance = Prelude__$3E$3E$3D_(null, null, null, Lib_Parse const Lib_Syntax_Class = ( h0, h1, h2, h3 ) => ({ tag: "Class", h0: h0, h1: h1, h2: h2, h3: h3 }); const Lib_Parser_parseClass = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("class"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_uident, ( name ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_many(null, Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_ebind)(Lib_Parser_nakedBind)), ( teles ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("where"), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_startBlock(null, Lib_Parser_Impl_manySame(null, Lib_Parser_parseSig)), ( decls ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_Class(fc, name, Prelude_join(null, null, Prelude_Prelude_Monad$20Prelude_List, teles), decls)))))))))))))); const Lib_Syntax_ShortData = ( h0, h1, h2 ) => ({ tag: "ShortData", h0: h0, h1: h1, h2: h2 }); -const Lib_Parser_Impl_sepBy = ( s$$0, a$$1, _$$2, _$$3 ) => (Prelude__$3C$2A$3E_(null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser)(null)(null)(Prelude__$3C$$$3E_(null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, null, null, ( eta ) => (( eta1 ) => (Prelude__$3A$3A_(null, eta, eta1))), _$$3))(Lib_Parser_Impl_many(null, Prelude__$2A$3E_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, _$$2, _$$3)))); const Lib_Parser_parseShortData = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("data"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_typeExpr, ( lhs ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("="), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_sepBy(null, null, Lib_Parser_Impl_keyword("|"), Lib_Parser_typeExpr), ( sigs ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_ShortData(fc, lhs, sigs)))))))))))); const Lib_Parser_parseData = Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_getPos, ( fc ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_try(null, Prelude__$3C$2A_(null, null, null, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Prelude__$2A$3E_(null, null, null, Lib_Parser_Impl_Prelude_Functor$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_Prelude_Applicative$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("data"), Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_uident)(Prelude__$3C$7C$3E_(null, Lib_Parser_Impl_Prelude_Alternative$20Lib_Parser_Impl_Parser)(null)(Lib_Parser_ident)(Lib_Parser_Impl_token("MixFix")))), Lib_Parser_Impl_keyword(":"))), ( name ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_typeExpr, ( ty ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_keyword("where"), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser, Lib_Parser_Impl_startBlock(null, Lib_Parser_Impl_manySame(null, Lib_Parser_parseSig)), ( decls ) => (Prelude_pure(null, Lib_Parser_Impl_Prelude_Monad$20Lib_Parser_Impl_Parser)(null)(Lib_Syntax_Data(fc, name, ty, decls)))))))))))); const Lib_Syntax_DCheck = ( h0, h1, h2 ) => ({ tag: "DCheck", h0: h0, h1: h1, h2: h2 }); @@ -1184,11 +1234,11 @@ const Lib_Tokenizer_TS = ( h0, h1, h2, h3 ) => ({ tag: "TS", h0: h0, h1: h1, const Lib_Token_MkBounds = ( h0, h1, h2, h3 ) => ({ tag: "MkBounds", h0: h0, h1: h1, h2: h2, h3: h3 }); const Lib_Token_Tok = ( h0, h1 ) => ({ tag: "Tok", h0: h0, h1: h1 }); const Lib_Token_MkBounded = ( h0, h1, h2 ) => ({ tag: "MkBounded", h0: h0, h1: h1, h2: h2 }); -const Lib_Tokenizer_keywords = Prelude__$3A$3A_(null, "let", Prelude__$3A$3A_(null, "in", Prelude__$3A$3A_(null, "where", Prelude__$3A$3A_(null, "case", Prelude__$3A$3A_(null, "of", Prelude__$3A$3A_(null, "data", Prelude__$3A$3A_(null, "U", Prelude__$3A$3A_(null, "do", Prelude__$3A$3A_(null, "ptype", Prelude__$3A$3A_(null, "pfunc", Prelude__$3A$3A_(null, "module", Prelude__$3A$3A_(null, "infixl", Prelude__$3A$3A_(null, "infixr", Prelude__$3A$3A_(null, "infix", Prelude__$3A$3A_(null, "∀", Prelude__$3A$3A_(null, "forall", Prelude__$3A$3A_(null, "import", Prelude__$3A$3A_(null, "uses", Prelude__$3A$3A_(null, "class", Prelude__$3A$3A_(null, "instance", Prelude__$3A$3A_(null, "record", Prelude__$3A$3A_(null, "constructor", Prelude__$3A$3A_(null, "if", Prelude__$3A$3A_(null, "then", Prelude__$3A$3A_(null, "else", Prelude__$3A$3A_(null, "$", Prelude__$3A$3A_(null, "λ", Prelude__$3A$3A_(null, "?", Prelude__$3A$3A_(null, "@", Prelude__$3A$3A_(null, ".", Prelude__$3A$3A_(null, "->", Prelude__$3A$3A_(null, "→", Prelude__$3A$3A_(null, ":", Prelude__$3A$3A_(null, "=>", Prelude__$3A$3A_(null, ":=", Prelude__$3A$3A_(null, "=", Prelude__$3A$3A_(null, "<-", Prelude__$3A$3A_(null, "\\", Prelude__$3A$3A_(null, "_", Prelude__$3A$3A_(null, "|", Prelude_Nil(null))))))))))))))))))))))))))))))))))))))))); +const Lib_Tokenizer_keywords = Prelude__$3A$3A_(null, "let", Prelude__$3A$3A_(null, "in", Prelude__$3A$3A_(null, "where", Prelude__$3A$3A_(null, "case", Prelude__$3A$3A_(null, "of", Prelude__$3A$3A_(null, "data", Prelude__$3A$3A_(null, "U", Prelude__$3A$3A_(null, "do", Prelude__$3A$3A_(null, "ptype", Prelude__$3A$3A_(null, "pfunc", Prelude__$3A$3A_(null, "module", Prelude__$3A$3A_(null, "infixl", Prelude__$3A$3A_(null, "infixr", Prelude__$3A$3A_(null, "infix", Prelude__$3A$3A_(null, "∀", Prelude__$3A$3A_(null, "forall", Prelude__$3A$3A_(null, "import", Prelude__$3A$3A_(null, "uses", Prelude__$3A$3A_(null, "class", Prelude__$3A$3A_(null, "instance", Prelude__$3A$3A_(null, "record", Prelude__$3A$3A_(null, "constructor", Prelude__$3A$3A_(null, "if", Prelude__$3A$3A_(null, "then", Prelude__$3A$3A_(null, "else", Prelude__$3A$3A_(null, "$", Prelude__$3A$3A_(null, "λ", Prelude__$3A$3A_(null, "?", Prelude__$3A$3A_(null, "@", Prelude__$3A$3A_(null, ".", Prelude__$3A$3A_(null, "->", Prelude__$3A$3A_(null, "→", Prelude__$3A$3A_(null, ":", Prelude__$3A$3A_(null, "=>", Prelude__$3A$3A_(null, ":=", Prelude__$3A$3A_(null, "$=", Prelude__$3A$3A_(null, "=", Prelude__$3A$3A_(null, "<-", Prelude__$3A$3A_(null, "\\", Prelude__$3A$3A_(null, "_", Prelude__$3A$3A_(null, "|", Prelude_Nil(null)))))))))))))))))))))))))))))))))))))))))); const Lib_Tokenizer_rawTokenise_isIdent_isUIdent_doBacktick_mktok = ( _, _1, _2, _3, _4, _5, _6, _7, _8, _$$9, _$$10, _$$11, _$$12, _$$13 ) => { let kind; const sc$$14 = Prelude__$26$26_(_$$9, Prelude_elem(null, Prelude_Prelude_Eq$20Prim_String, _$$13, Lib_Tokenizer_keywords)); switch (sc$$14) { case "False": { kind = _$$12; break; } case "True": { kind = "Keyword"; break; } } return Lib_Token_MkBounded(null, Lib_Token_Tok(kind, _$$13), Lib_Token_MkBounds(_1, _2, _$$10, _$$11)); }; const Data_SnocList_REC_snocelem = ( arg ) => { const _sc$$0 = arg.h3; switch (_sc$$0.tag) { case "_:<_": { const sc$$7 = Prelude__$3D$3D_(null, arg.h1)(arg.h2)(_sc$$0.h2); switch (sc$$7) { case "False": return { tag: "Data.SnocList.snocelem", h0: null, h1: arg.h1, h2: arg.h2, h3: _sc$$0.h1 }; case "True": return { tag: "return", h0: "True" }; } break; } case "Lin": return { tag: "return", h0: "False" }; } }; const Data_SnocList_snocelem = ( a$$0, _$$1, _$$2, _$$3 ) => (bouncer(Data_SnocList_REC_snocelem, { tag: "Data.SnocList.snocelem", h0: a$$0, h1: _$$1, h2: _$$2, h3: _$$3 })); -const Lib_Tokenizer_standalone = Prelude_unpack("()\\{}[],.@"); +const Lib_Tokenizer_standalone = Prelude_unpack("()\\{}[],.@;"); const Prelude_isSpace = ( _$$0 ) => { switch (_$$0) { case " ": return "True"; case "\n": return "True"; default: return "False"; } }; const Lib_Tokenizer_rawTokenise_isIdent = ( _, _1, _2, _3, _4, _5, _$$6 ) => (Prelude_not(Prelude__$7C$7C_(Prelude_isSpace(_$$6), Prelude_elem(null, Prelude_Prelude_Eq$20Prim_Char, _$$6, Lib_Tokenizer_standalone)))); const Prelude_isUpper = ( _$$0 ) => { const o = Prelude_ord(_$$0); return Prelude__$26$26_(Prelude__$3C_(null, Prelude_Prelude_Ord$20Prim_Int, 64, o), Prelude__$3C_(null, Prelude_Prelude_Ord$20Prim_Int, o, 91)); }; @@ -1213,7 +1263,7 @@ const Node_readFile = (fn) => (w) => { return Prelude_MkIORes(null, result, w) }; const Lib_Types_emptyModCtx = ( _$$0 ) => (Lib_Types_MkModCtx(_$$0, Data_SortedMap_EmptyMap(null, null), Lib_Types_MC(Data_SortedMap_EmptyMap(null, null), Prelude_Nil(null), 0, "NoCheck"), Data_SortedMap_EmptyMap(null, null))); -const Main_processModule = ( _$$0, _$$1, _$$2, _$$3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => { const modns = Prelude_snoc(null, _$$3.h0, _$$3.h1); const name = Prelude_joinBy(".", modns); const sc$$10 = Data_SortedMap_lookupMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, Lib_Types__modules(top)); switch (sc$$10.tag) { case "Nothing": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top1 ) => (Lib_Types_MkTop(Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, Lib_Types_emptyModCtx(""), Lib_Types__modules(top1)), Lib_Types__imported(top1), Lib_Types__hints(top1), Lib_Types__ns(top1), Lib_Types__defs(top1), Lib_Types__metaCtx(top1), Lib_Types__verbose(top1), Lib_Types__errors(top1), Lib_Types__ops(top1)))), ( _ ) => { const fn = Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_joinBy("/", Prelude__$3A$3A_(null, _$$1, _$$3.h0)))(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("/")(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(_$$3.h1)(".newt"))); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Node_readFile(fn)), ( $$sc ) => { switch ($$sc.tag) { case "Right": { const sc$$19 = Lib_Tokenizer_tokenise(fn, $$sc.h2); switch (sc$$19.tag) { case "Right": { const sc$$23 = Lib_Parser_Impl_partialParse(null, fn, Lib_Parser_parseModHeader, Lib_Types__ops(top), sc$$19.h2); switch (sc$$23.tag) { case "Right": { const _sc$$0 = sc$$23.h2; const _sc$$1 = _sc$$0.h2; const _sc$$2 = _sc$$0.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _1 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("scan imports for module ")(_sc$$1.h3))(""))), ( _1 ) => { const ns = Prelude_split(_sc$$1.h3, "."); const sc$$41 = Data_List1_unsnoc(null, Data_List1_split1(_sc$$1.h3, ".")); const sc$$46 = Prelude__$3D$3D_(null, Lib_Common_Prelude_Eq$20Lib_Common_QName)(_$$3)(Lib_Common_QN(sc$$41.h2, sc$$41.h3)); switch (sc$$46) { case "True": { const sc$$47 = Lib_Parser_Impl_partialParse(null, fn, Lib_Parser_parseImports, _sc$$2.h2, _sc$$2.h3); switch (sc$$47.tag) { case "Right": { const _sc$$3 = sc$$47.h2; const _sc$$4 = _sc$$3.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, _sc$$3.h2, ( $$case ) => { const sc$$63 = Data_List1_unsnoc(null, Data_List1_split1($$case.h1, ".")); const qname = Lib_Common_QN(sc$$63.h2, sc$$63.h3); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_when(null, Lib_Types_Prelude_Applicative$20Lib_Types_M, Prelude_elem(null, Prelude_Prelude_Eq$20Prim_String, $$case.h1, _$$2), ( _2 ) => (Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("import loop ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(name)))(" -> "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)($$case.h1)))("")))), ( _2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_processModule($$case.h0, _$$1, Prelude__$3A$3A_(null, name, _$$2), qname), ( _3 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude_split($$case.h1, ".")))))); }), ( imported ) => { const imported1 = Prelude_snoc(null, imported, Main_primNS); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Serialize_checksum($$sc.h2)), ( srcSum ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_moduleHash(srcSum, imported1), ( csum ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("module ")(_sc$$1.h3))("")), ( _2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Serialize_loadModule(_$$3, csum), ( $$sc1 ) => { switch ($$sc1.tag) { case "Nothing": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _3 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("MODNS ")(Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Show$20Prim_String))(modns)))), ( _3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_parseDecls(fn, Lib_Types__ops(top2), _sc$$4.h3, Prelude_Lin(null)), ( $$sc2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Data_IORef_newIORef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Types_MC(Data_SortedMap_EmptyMap(null, null), Prelude_Nil(null), 0, "CheckAll")), ( freshMC ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top4 ) => (Lib_Types_MkTop(Lib_Types__modules(top4), imported1, Data_SortedMap_EmptyMap(null, null), modns, Data_SortedMap_EmptyMap(null, null), freshMC, Lib_Types__verbose(top4), Lib_Types__errors(top4), $$sc2.h3))), ( _4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, imported1, ( ns1 ) => { const sc$$80 = Data_SortedMap_lookupMap$27(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), ns1, Lib_Types__modules(top3)); switch (sc$$80.tag) { case "Just": return Main_importHints(Data_SortedMap_listValues(null, null, Lib_Types__modDefs(sc$$80.h1))); default: return Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("namespace ")(Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Show$20Prim_String))(ns1)))(" missing")); } }), ( _5 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _6 ) => ("process Decls")), ( _6 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(( eta ) => (Main_processModule_tryProcessDecl(_$$0, _$$1, _$$2, _$$3, _$$3.h0, _$$3.h1, null, ns, eta)))(Lib_Elab_collectDecl($$sc2.h2)), ( _7 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Data_IORef_readIORef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Types__metaCtx(top4)), ( mc ) => { const mod = Lib_Types_MkModCtx(csum, Lib_Types__defs(top4), mc, Lib_Types__ops(top4)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Data_IORef_readIORef(null, null, Prelude_Prelude_HasIO$20Prelude_IO, Lib_Types__errors(top4))), ( errors ) => { const sc$$86 = Prelude__$26$26_(Prelude__$2F$3D_(null, Prelude_Prelude_Eq$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Eq$20Prim_String), _$$2, Prelude_Nil(null)), Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_Int)(Prelude_length$27(null, errors))(0)); switch (sc$$86) { case "False": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)("MkUnit"), ( _8 ) => { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, mod, Lib_Types__modules(top4)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top5 ) => (Lib_Types_MkTop(modules, Lib_Types__imported(top5), Lib_Types__hints(top5), Lib_Types__ns(top5), Lib_Types__defs(top5), Lib_Types__metaCtx(top5), Lib_Types__verbose(top5), Lib_Types__errors(top5), Lib_Types__ops(top5)))), ( _9 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Data_IORef_readIORef(null, null, Prelude_Prelude_HasIO$20Prelude_IO, Lib_Types__errors(top4))), ( $$sc3 ) => { switch ($$sc3.tag) { case "Nil": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_logMetas(Prelude_reverse(null)(Data_SortedMap_listValues(null, null, Lib_Types__metas(mc)))), ( _10 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc.h2))); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for_(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, $$sc3, ( err ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Common_showError($$sc.h2, err)))), ( _10 ) => (Node_exitFailure(null, "Compile failed"))); } }))); }); case "True": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Serialize_dumpModule(_$$3, $$sc.h2, mod), ( _8 ) => { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, mod, Lib_Types__modules(top4)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top5 ) => (Lib_Types_MkTop(modules, Lib_Types__imported(top5), Lib_Types__hints(top5), Lib_Types__ns(top5), Lib_Types__defs(top5), Lib_Types__metaCtx(top5), Lib_Types__verbose(top5), Lib_Types__errors(top5), Lib_Types__ops(top5)))), ( _9 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Data_IORef_readIORef(null, null, Prelude_Prelude_HasIO$20Prelude_IO, Lib_Types__errors(top4))), ( $$sc3 ) => { switch ($$sc3.tag) { case "Nil": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_logMetas(Prelude_reverse(null)(Data_SortedMap_listValues(null, null, Lib_Types__metas(mc)))), ( _10 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc.h2))); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for_(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, $$sc3, ( err ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Common_showError($$sc.h2, err)))), ( _10 ) => (Node_exitFailure(null, "Compile failed"))); } }))); }); } }); }))))))))))))))))))))); case "Just": { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, $$sc1.h1, Lib_Types__modules(top1)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top2 ) => { const ops = Data_SortedMap_foldMap(null, null, Prelude_Prelude_Ord$20Prim_String, ( eta ) => (( eta1 ) => (Prelude_const(null, null, eta, eta1))), Lib_Types__ops(top2), Data_SortedMap_toList(null, null, Lib_Types__ctxOps($$sc1.h1))); return Lib_Types_MkTop(modules, Lib_Types__imported(top2), Lib_Types__hints(top2), Lib_Types__ns(top2), Lib_Types__defs(top2), Lib_Types__metaCtx(top2), Lib_Types__verbose(top2), Lib_Types__errors(top2), ops); }), ( _3 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc.h2))); break; } } }))))))))); }); break; } case "Left": { const _sc$$3 = sc$$47.h2; return Node_exitFailure(null, Lib_Common_showError($$sc.h2, _sc$$3.h2)); break; } } break; } default: return Node_exitFailure(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("ERROR at ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_FC)(_sc$$1.h2)))(": module name "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$1.h3)))(" doesn't match file name "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(fn)))("")); } }); break; } case "Left": { const _sc$$0 = sc$$23.h2; return Node_exitFailure(null, Lib_Common_showError($$sc.h2, _sc$$0.h2)); break; } } break; } case "Left": return Node_exitFailure(null, Lib_Common_showError($$sc.h2, sc$$19.h2)); } break; } case "Left": return Node_exitFailure(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("ERROR at ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_FC)(_$$0)))(": error reading "))(fn))(": "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)($$sc.h2)))("")); } }); }); default: return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(""); } })); +const Main_processModule = ( _$$0, _$$1, _$$2, _$$3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => { const modns = Prelude_snoc(null, _$$3.h0, _$$3.h1); const name = Prelude_joinBy(".", modns); const sc$$10 = Data_SortedMap_lookupMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, Lib_Types__modules(top)); switch (sc$$10.tag) { case "Nothing": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( $$ru ) => (Lib_Types_MkTop(Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, Lib_Types_emptyModCtx(""), Lib_Types__modules(top)), Lib_Types__imported($$ru), Lib_Types__hints($$ru), Lib_Types__ns($$ru), Lib_Types__defs($$ru), Lib_Types__metaCtx($$ru), Lib_Types__verbose($$ru), Lib_Types__errors($$ru), Lib_Types__ops($$ru)))), ( _ ) => { const fn = Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude_joinBy("/", Prelude__$3A$3A_(null, _$$1, _$$3.h0)))(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("/")(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(_$$3.h1)(".newt"))); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Node_readFile(fn)), ( $$sc ) => { switch ($$sc.tag) { case "Right": { const sc$$19 = Lib_Tokenizer_tokenise(fn, $$sc.h2); switch (sc$$19.tag) { case "Right": { const sc$$23 = Lib_Parser_Impl_partialParse(null, fn, Lib_Parser_parseModHeader, Lib_Types__ops(top), sc$$19.h2); switch (sc$$23.tag) { case "Right": { const _sc$$0 = sc$$23.h2; const _sc$$1 = _sc$$0.h2; const _sc$$2 = _sc$$0.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _1 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("scan imports for module ")(_sc$$1.h3))(""))), ( _1 ) => { const ns = Prelude_split(_sc$$1.h3, "."); const sc$$41 = Data_List1_unsnoc(null, Data_List1_split1(_sc$$1.h3, ".")); const sc$$46 = Prelude__$3D$3D_(null, Lib_Common_Prelude_Eq$20Lib_Common_QName)(_$$3)(Lib_Common_QN(sc$$41.h2, sc$$41.h3)); switch (sc$$46) { case "True": { const sc$$47 = Lib_Parser_Impl_partialParse(null, fn, Lib_Parser_parseImports, _sc$$2.h2, _sc$$2.h3); switch (sc$$47.tag) { case "Right": { const _sc$$3 = sc$$47.h2; const _sc$$4 = _sc$$3.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, _sc$$3.h2, ( $$case ) => { const sc$$63 = Data_List1_unsnoc(null, Data_List1_split1($$case.h1, ".")); const qname = Lib_Common_QN(sc$$63.h2, sc$$63.h3); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_when(null, Lib_Types_Prelude_Applicative$20Lib_Types_M, Prelude_elem(null, Prelude_Prelude_Eq$20Prim_String, $$case.h1, _$$2), ( _2 ) => (Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("import loop ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(name)))(" -> "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)($$case.h1)))("")))), ( _2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_processModule($$case.h0, _$$1, Prelude__$3A$3A_(null, name, _$$2), qname), ( _3 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude_split($$case.h1, ".")))))); }), ( imported ) => { const imported1 = Prelude_snoc(null, imported, Main_primNS); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Serialize_checksum($$sc.h2)), ( srcSum ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_moduleHash(srcSum, imported1), ( csum ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("module ")(_sc$$1.h3))("")), ( _2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Serialize_loadModule(_$$3, csum), ( $$sc1 ) => { switch ($$sc1.tag) { case "Nothing": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _3 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("MODNS ")(Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Show$20Prim_String))(modns)))), ( _3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_parseDecls(fn, Lib_Types__ops(top2), _sc$$4.h3, Prelude_Lin(null)), ( $$sc2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Data_IORef_newIORef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Types_MC(Data_SortedMap_EmptyMap(null, null), Prelude_Nil(null), 0, "CheckAll")), ( freshMC ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top4 ) => (Lib_Types_MkTop(Lib_Types__modules(top4), imported1, Data_SortedMap_EmptyMap(null, null), modns, Data_SortedMap_EmptyMap(null, null), freshMC, Lib_Types__verbose(top4), Lib_Types__errors(top4), $$sc2.h3))), ( _4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, imported1, ( ns1 ) => { const sc$$80 = Data_SortedMap_lookupMap$27(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), ns1, Lib_Types__modules(top3)); switch (sc$$80.tag) { case "Just": return Main_importHints(Data_SortedMap_listValues(null, null, Lib_Types__modDefs(sc$$80.h1))); default: return Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("namespace ")(Prelude_show(null, Prelude_Prelude_Show$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Show$20Prim_String))(ns1)))(" missing")); } }), ( _5 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _6 ) => ("process Decls")), ( _6 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(( eta ) => (Main_processModule_tryProcessDecl(_$$0, _$$1, _$$2, _$$3, _$$3.h0, _$$3.h1, null, ns, eta)))(Lib_Elab_collectDecl($$sc2.h2)), ( _7 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Data_IORef_readIORef(null, null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Types__metaCtx(top4)), ( mc ) => { const mod = Lib_Types_MkModCtx(csum, Lib_Types__defs(top4), mc, Lib_Types__ops(top4)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Data_IORef_readIORef(null, null, Prelude_Prelude_HasIO$20Prelude_IO, Lib_Types__errors(top4))), ( errors ) => { const sc$$86 = Prelude__$26$26_(Prelude__$2F$3D_(null, Prelude_Prelude_Eq$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Eq$20Prim_String), _$$2, Prelude_Nil(null)), Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_Int)(Prelude_length$27(null, errors))(0)); switch (sc$$86) { case "False": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)("MkUnit"), ( _8 ) => { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, mod, Lib_Types__modules(top4)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( $$ru ) => (Lib_Types_MkTop(modules, Lib_Types__imported($$ru), Lib_Types__hints($$ru), Lib_Types__ns($$ru), Lib_Types__defs($$ru), Lib_Types__metaCtx($$ru), Lib_Types__verbose($$ru), Lib_Types__errors($$ru), Lib_Types__ops($$ru)))), ( _9 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Data_IORef_readIORef(null, null, Prelude_Prelude_HasIO$20Prelude_IO, Lib_Types__errors(top4))), ( $$sc3 ) => { switch ($$sc3.tag) { case "Nil": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_logMetas(Prelude_reverse(null)(Data_SortedMap_listValues(null, null, Lib_Types__metas(mc)))), ( _10 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc.h2))); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for_(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, $$sc3, ( err ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Common_showError($$sc.h2, err)))), ( _10 ) => (Node_exitFailure(null, "Compile failed"))); } }))); }); case "True": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Serialize_dumpModule(_$$3, $$sc.h2, mod), ( _8 ) => { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, mod, Lib_Types__modules(top4)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( $$ru ) => (Lib_Types_MkTop(modules, Lib_Types__imported($$ru), Lib_Types__hints($$ru), Lib_Types__ns($$ru), Lib_Types__defs($$ru), Lib_Types__metaCtx($$ru), Lib_Types__verbose($$ru), Lib_Types__errors($$ru), Lib_Types__ops($$ru)))), ( _9 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Data_IORef_readIORef(null, null, Prelude_Prelude_HasIO$20Prelude_IO, Lib_Types__errors(top4))), ( $$sc3 ) => { switch ($$sc3.tag) { case "Nil": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_logMetas(Prelude_reverse(null)(Data_SortedMap_listValues(null, null, Lib_Types__metas(mc)))), ( _10 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc.h2))); default: return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_for_(null, null, Prelude_Prelude_Traversable$20Prelude_List, Lib_Types_Prelude_Applicative$20Lib_Types_M, null, null, $$sc3, ( err ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Lib_Common_showError($$sc.h2, err)))), ( _10 ) => (Node_exitFailure(null, "Compile failed"))); } }))); }); } }); }))))))))))))))))))))); case "Just": { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), modns, $$sc1.h1, Lib_Types__modules(top1)); const ops = Data_SortedMap_foldMap(null, null, Prelude_Prelude_Ord$20Prim_String, ( eta ) => (( eta1 ) => (Prelude_const(null, null, eta, eta1))), Lib_Types__ops(top1), Data_SortedMap_toList(null, null, Lib_Types__ctxOps($$sc1.h1))); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( $$ru ) => (Lib_Types_MkTop(modules, Lib_Types__imported($$ru), Lib_Types__hints($$ru), Lib_Types__ns($$ru), Lib_Types__defs($$ru), Lib_Types__metaCtx($$ru), Lib_Types__verbose($$ru), Lib_Types__errors($$ru), ops))), ( _3 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)($$sc.h2))); break; } } }))))))))); }); break; } case "Left": { const _sc$$3 = sc$$47.h2; return Node_exitFailure(null, Lib_Common_showError($$sc.h2, _sc$$3.h2)); break; } } break; } default: return Node_exitFailure(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("ERROR at ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_FC)(_sc$$1.h2)))(": module name "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$1.h3)))(" doesn't match file name "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(fn)))("")); } }); break; } case "Left": { const _sc$$0 = sc$$23.h2; return Node_exitFailure(null, Lib_Common_showError($$sc.h2, _sc$$0.h2)); break; } } break; } case "Left": return Node_exitFailure(null, Lib_Common_showError($$sc.h2, sc$$19.h2)); } break; } case "Left": return Node_exitFailure(null, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("ERROR at ")(Prelude_show(null, Lib_Common_Prelude_Show$20Lib_Common_FC)(_$$0)))(": error reading "))(fn))(": "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)($$sc.h2)))("")); } }); }); default: return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(""); } })); const Lib_Util_REC_getBaseDir_baseDir = ( arg ) => { const _sc$$0 = arg.h4; switch (_sc$$0.tag) { case "_:<_": { const _sc$$1 = arg.h3; switch (_sc$$1.tag) { case "_:<_": { const sc$$11 = Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(_sc$$1.h2)(_sc$$0.h2); switch (sc$$11) { case "False": return { tag: "return", h0: Prelude_Left(null, null, "module path doesn't match directory") }; case "True": return { tag: "Lib.Util.getBaseDir.baseDir", h0: arg.h0, h1: arg.h1, h2: arg.h2, h3: _sc$$1.h1, h4: _sc$$0.h1 }; } break; } case "Lin": return { tag: "return", h0: Prelude_Left(null, null, "module path doesn't match directory") }; } break; } case "Lin": return { tag: "return", h0: Prelude_Right(null, null, Prelude_joinBy("/", Prelude__$3C$3E$3E_(null, arg.h3, Prelude_Nil(null)))) }; } }; const Lib_Util_getBaseDir_baseDir = ( _, _1, _2, _$$3, _$$4 ) => (bouncer(Lib_Util_REC_getBaseDir_baseDir, { tag: "Lib.Util.getBaseDir.baseDir", h0: _, h1: _1, h2: _2, h3: _$$3, h4: _$$4 })); const Prelude_mapFst = ( a$$0, b$$1, c$$2, f$$3, _$$4, _$$5, _$$6 ) => (Prelude_bimap(null, _$$4)(null)(null)(null)(null)(_$$5)(( eta ) => (Prelude_id(null, eta)))(_$$6)); @@ -1221,7 +1271,7 @@ const Data_List1_splitFileName = ( _$$0 ) => { const sc$$1 = Data_List1_split1(_ const Lib_Util_getBaseDir = ( _$$0, _$$1 ) => { const sc$$3 = Data_List1_unsnoc(null, Data_List1_split1(_$$1, ".")); const parts = Data_List1_split1(_$$0, "/"); const sc$$9 = Data_List1_unsnoc(null, parts); const sc$$14 = Data_List1_splitFileName(sc$$9.h3); const parts1 = Data_List1_split1(_$$0, "/"); const sc$$20 = Data_List1_unsnoc(null, parts1); const sc$$25 = Data_List1_unsnoc(null, Data_List1_split1(_$$1, ".")); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_unless(null, Lib_Types_Prelude_Applicative$20Lib_Types_M, Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(sc$$25.h3)(sc$$14.h2), ( _ ) => (Lib_Types_error(null, Lib_Common_MkFC(_$$0, Prelude__$2C_(null, null, 0, 0)), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("module name ")(sc$$25.h3))(" doesn't match "))(sc$$14.h2))("")))), ( _ ) => { const sc$$31 = Lib_Util_getBaseDir_baseDir(_$$0, _$$1, null, Prelude__$3C$3E$3C_(null, Prelude_Lin(null), sc$$20.h2), Prelude__$3C$3E$3C_(null, Prelude_Lin(null), sc$$25.h2)); switch (sc$$31.tag) { case "Right": { let base; const sc$$35 = Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20Prim_String)(sc$$31.h2)(""); switch (sc$$35) { case "False": { base = sc$$31.h2; break; } case "True": { base = "."; break; } } return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, base, Lib_Common_QN(sc$$25.h2, sc$$25.h3))); break; } case "Left": return Lib_Types_error(null, Lib_Common_MkFC(_$$0, Prelude__$2C_(null, null, 0, 0)), sc$$31.h2); } }); }; const Main_processFile = ( _$$0 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("*** Process ")(_$$0))("")), ( _ ) => { const parts = Data_List1_split1(_$$0, "/"); const sc$$3 = Data_List1_unsnoc(null, parts); let dir; const sc$$8 = Prelude__$3D$3D_(null, Prelude_Prelude_Eq$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Eq$20Prim_String))(sc$$3.h2)(Prelude_Nil(null)); switch (sc$$8) { case "False": { dir = Prelude_joinBy("/", sc$$3.h2); break; } case "True": { dir = "."; break; } } const sc$$9 = Data_List1_splitFileName(sc$$3.h3); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_log(1, ( _1 ) => (Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(dir)))(" "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(sc$$9.h2)))(" "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(sc$$9.h3)))(""))), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Node_readFile(_$$0)), ( $$sc ) => { switch ($$sc.tag) { case "Right": { const sc$$20 = Lib_Tokenizer_tokenise(_$$0, $$sc.h2); switch (sc$$20.tag) { case "Right": { const sc$$24 = Lib_Parser_Impl_partialParse(null, _$$0, Lib_Parser_parseModHeader, Data_SortedMap_EmptyMap(null, null), sc$$20.h2); switch (sc$$24.tag) { case "Right": { const _sc$$0 = sc$$24.h2; const _sc$$1 = _sc$$0.h2; const _sc$$2 = _sc$$0.h3; return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Util_getBaseDir(_$$0, _sc$$1.h3), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_processDecl(Main_primNS, Lib_Syntax_PType(Lib_Common_emptyFC, "Int", Prelude_Nothing(null))), ( _2 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_processDecl(Main_primNS, Lib_Syntax_PType(Lib_Common_emptyFC, "String", Prelude_Nothing(null))), ( _3 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_ProcessDecl_processDecl(Main_primNS, Lib_Syntax_PType(Lib_Common_emptyFC, "Char", Prelude_Nothing(null))), ( _4 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top ) => { const modules = Data_SortedMap_updateMap(null, null, Prelude_Prelude_Ord$20$28Prelude_List$20BND$3A1$29(null, Prelude_Prelude_Ord$20Prim_String), Main_primNS, Lib_Types_MkModCtx("", Lib_Types__defs(top), Lib_Types_MC(Data_SortedMap_EmptyMap(null, null), Prelude_Nil(null), 0, "CheckAll"), Lib_Types__ops(top)), Lib_Types__modules(top)); return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top1 ) => (Lib_Types_MkTop(modules, Prelude__$3A$3A_(null, Main_primNS, Prelude_Nil(null)), Data_SortedMap_EmptyMap(null, null), Prelude_Nil(null), Data_SortedMap_EmptyMap(null, null), Lib_Types__metaCtx(top1), Lib_Types__verbose(top1), Lib_Types__errors(top1), Lib_Types__ops(top1)))), ( _5 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_processModule(Lib_Common_emptyFC, $$sc1.h2, Prelude_Nil(null), $$sc1.h3), ( src ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_getTop, ( top1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_showErrors(_$$0, src), ( _6 ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)("MkUnit"))))))))); }))))))))); break; } case "Left": { const _sc$$0 = sc$$24.h2; return Lib_Types_throwError(null, _sc$$0.h2); break; } } break; } case "Left": return Lib_Types_throwError(null, sc$$20.h2); } break; } case "Left": return Lib_Types_error(null, Lib_Common_MkFC(_$$0, Prelude__$2C_(null, null, 0, 0)), Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("error reading ")(_$$0))(": "))(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)($$sc.h2)))("")); } }))); })); const Prelude_isSuffixOf = (pfx, s) => s.endsWith(pfx) ? Prelude_True : Prelude_False; -const Main_REC_cmdLine = ( arg ) => { const _sc$$0 = arg.h0; switch (_sc$$0.tag) { case "_::_": { const _sc$$1 = _sc$$0.h1; switch (_sc$$1) { case "--top": return { tag: "Main.cmdLine", h0: _sc$$0.h2 }; case "-v": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( top ) => (Lib_Types_MkTop(Lib_Types__modules(top), Lib_Types__imported(top), Lib_Types__hints(top), Lib_Types__ns(top), Lib_Types__defs(top), Lib_Types__metaCtx(top), Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(Lib_Types__verbose(top))(1), Lib_Types__errors(top), Lib_Types__ops(top)))), ( _ ) => (Main_cmdLine(_sc$$0.h2))) }; case "-o": { const _sc$$2 = _sc$$0.h2; switch (_sc$$2.tag) { case "_::_": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine(_sc$$2.h2), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Prelude__$3C$7C$3E_(null, Prelude_Prelude_Alternative$20Prelude_Maybe)(null)($$sc.h2)(Prelude_Just(null, _sc$$2.h1)), $$sc.h3)))) }; default: { const sc$$4 = Prelude_isSuffixOf(".newt", _sc$$0.h1); switch (sc$$4) { case "True": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine(_sc$$0.h2), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, $$sc.h2, Prelude__$3A$3A_(null, _sc$$0.h1, $$sc.h3))))) }; default: return { tag: "return", h0: Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Bad argument ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))("")) }; } break; } } break; } default: { const sc$$4 = Prelude_isSuffixOf(".newt", _sc$$0.h1); switch (sc$$4) { case "True": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine(_sc$$0.h2), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, $$sc.h2, Prelude__$3A$3A_(null, _sc$$0.h1, $$sc.h3))))) }; default: return { tag: "return", h0: Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Bad argument ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))("")) }; } break; } } break; } case "Nil": return { tag: "return", h0: Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Prelude_Nothing(null), Prelude_Nil(null))) }; } }; +const Main_REC_cmdLine = ( arg ) => { const _sc$$0 = arg.h0; switch (_sc$$0.tag) { case "_::_": { const _sc$$1 = _sc$$0.h1; switch (_sc$$1) { case "--top": return { tag: "Main.cmdLine", h0: _sc$$0.h2 }; case "-v": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Lib_Types_modifyTop(( $$ru ) => (Lib_Types_MkTop(Lib_Types__modules($$ru), Lib_Types__imported($$ru), Lib_Types__hints($$ru), Lib_Types__ns($$ru), Lib_Types__defs($$ru), Lib_Types__metaCtx($$ru), Prelude__$2B_(null, Prelude_Prelude_Add$20Prim_Int)(1)(Lib_Types__verbose($$ru)), Lib_Types__errors($$ru), Lib_Types__ops($$ru)))), ( _ ) => (Main_cmdLine(_sc$$0.h2))) }; case "-o": { const _sc$$2 = _sc$$0.h2; switch (_sc$$2.tag) { case "_::_": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine(_sc$$2.h2), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Prelude__$3C$7C$3E_(null, Prelude_Prelude_Alternative$20Prelude_Maybe)(null)($$sc.h2)(Prelude_Just(null, _sc$$2.h1)), $$sc.h3)))) }; default: { const sc$$4 = Prelude_isSuffixOf(".newt", _sc$$0.h1); switch (sc$$4) { case "True": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine(_sc$$0.h2), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, $$sc.h2, Prelude__$3A$3A_(null, _sc$$0.h1, $$sc.h3))))) }; default: return { tag: "return", h0: Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Bad argument ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))("")) }; } break; } } break; } default: { const sc$$4 = Prelude_isSuffixOf(".newt", _sc$$0.h1); switch (sc$$4) { case "True": return { tag: "return", h0: Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine(_sc$$0.h2), ( $$sc ) => (Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, $$sc.h2, Prelude__$3A$3A_(null, _sc$$0.h1, $$sc.h3))))) }; default: return { tag: "return", h0: Lib_Types_error(null, Lib_Common_emptyFC, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("Bad argument ")(Prelude_show(null, Prelude_Prelude_Show$20Prim_String)(_sc$$0.h1)))("")) }; } break; } } break; } case "Nil": return { tag: "return", h0: Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)(Prelude__$2C_(null, null, Prelude_Nothing(null), Prelude_Nil(null))) }; } }; const Main_cmdLine = ( _$$0 ) => (bouncer(Main_REC_cmdLine, { tag: "Main.cmdLine", h0: _$$0 })); const Node_getArgs = (w) => Prelude_MkIORes(null, Prelude_arrayToList(null, process.argv.slice(1)), w); const Main_main$27 = Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_liftIO(null, Lib_Types_Prelude_HasIO$20Lib_Types_M)(null)(Node_getArgs), ( $$sc ) => { switch ($$sc.tag) { case "_::_": return Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_cmdLine($$sc.h2), ( $$sc1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_traverse(null, Prelude_Prelude_Traversable$20Prelude_List)(null)(null)(null)(Lib_Types_Prelude_Applicative$20Lib_Types_M)(Main_processFile)($$sc1.h3), ( _ ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Prelude_when(null, Lib_Types_Prelude_Applicative$20Lib_Types_M, Prelude_elem(null, Prelude_Prelude_Eq$20Prim_String, "--top", $$sc.h2), ( _1 ) => (Prelude__$3E$3E$3D_(null, null, null, Lib_Types_Prelude_Monad$20Lib_Types_M, Main_jsonTopContext, ( json ) => (Prelude_putStrLn(null, Lib_Types_Prelude_HasIO$20Lib_Types_M, Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)(Prelude__$2B$2B_(null, Prelude_Prelude_Concat$20Prim_String)("TOP:")(Lib_Common_renderJson(json)))("")))))), ( _1 ) => { const _sc$$0 = $$sc1.h2; switch (_sc$$0.tag) { case "Nothing": return Prelude_pure(null, Lib_Types_Prelude_Monad$20Lib_Types_M)(null)("MkUnit"); case "Just": return Main_writeSource(_sc$$0.h1); } }))))); default: return Lib_Types_error(null, Lib_Common_emptyFC, "error reading args"); } }); diff --git a/newt-vscode/syntaxes/newt.tmLanguage.json b/newt-vscode/syntaxes/newt.tmLanguage.json index 730a8d7..6cb2f8f 100644 --- a/newt-vscode/syntaxes/newt.tmLanguage.json +++ b/newt-vscode/syntaxes/newt.tmLanguage.json @@ -24,6 +24,10 @@ "end": "`", "patterns": [{ "include": "source.js" }] }, + { + "name": "character", + "match": "'\\\\?.'" + }, { "name": "string.double.newt", "begin": "\"", diff --git a/src/Lib/Elab.newt b/src/Lib/Elab.newt index 28de1ea..eb4be61 100644 --- a/src/Lib/Elab.newt +++ b/src/Lib/Elab.newt @@ -1313,9 +1313,60 @@ undo prev ((DoArrow fc left right alts) :: xs) = do pure $ RApp fc (RApp fc (RVar fc "_>>=_") right Explicit) (RLam fc (BI fc nm Explicit Many) rest) Explicit + + + +-- REVIEW do we want to let arg? +-- collect fields and default assignment +-- subst in real assignment +updateRec : Context → FC → List UpdateClause → Maybe Raw → Val → M Tm +updateRec ctx fc clauses arg ty = do + ((QN _ conname), args) <- getTele arg ty + args' <- foldlM doClause args clauses + let tm = foldl (\ acc tm => RApp (getFC tm) acc tm Explicit) (RVar fc conname) $ map snd args' + let tm = case arg of + Just arg => tm + Nothing => RLam fc (BI fc "$ru" Explicit Many) tm + check ctx tm ty + where + doClause : List (String × Raw) → UpdateClause → M (List (String × Raw)) + doClause args (ModifyField fc nm tm) = go args + where + go : List (String × Raw) → M (List (String × Raw)) + go Nil = error fc "\{nm} is not a field of \{show ty}" + go (x :: xs) = if fst x == nm + -- need arg in here and apply tm to arg + then pure $ (nm, RApp fc tm (snd x) Explicit) :: xs + else _::_ x <$> go xs + doClause args (AssignField fc nm tm) = go args + where + go : List (String × Raw) → M (List (String × Raw)) + go Nil = error fc "\{nm} is not a field of \{show ty}" + go (x :: xs) = if fst x == nm then pure $ (nm, tm) :: xs else _::_ x <$> go xs + + collect : Raw → Tm → List (String × Raw) + collect arg (Pi _ nm _ _ a b) = (nm, RApp fc (RVar fc $ "." ++ nm) arg Explicit) :: collect arg b + collect _ _ = Nil + + getTele : Maybe Raw → Val → M (QName × List (String × Raw)) + getTele (Just arg) (VRef fc nm sp) = do + top <- getTop + let (Just (MkEntry _ _ _ (TCon _ (conname :: Nil)) _)) = lookup nm top + | Just _ => error fc "\{show nm} is not a record" + | _ => error fc "\{show nm} not in scope" + let (Just (MkEntry _ _ ty (DCon _ _ _) _)) = lookup conname top + | _ => error fc "\{show conname} not a dcon" + pure $ (conname, collect arg ty) + -- + getTele Nothing (VPi _ _ _ _ a b) = getTele (Just $ RVar fc "$ru") a + getTele Nothing v = error (getFC v) "Expected a pi type, got \{show v}" + getTele _ v = error (getFC v) "Expected a record type, got \{show v}" + + check ctx tm ty = do ty' <- forceType ctx.env ty case (tm, ty') of + (RUpdateRec fc clauses arg, ty) => updateRec ctx fc clauses arg ty (RWhere fc decls body, ty) => checkWhere ctx (collectDecl decls) body ty (RIf fc a b c, ty) => let tm' = RCase fc a ( MkAlt (RVar (getFC b) "True") b :: MkAlt (RVar (getFC c) "False") c :: Nil) in @@ -1406,6 +1457,18 @@ check ctx tm ty = do unifyCatch (getFC tm) ctx ty' ty pure tm' +-- We assume the types are the same here, which looses some flexibility +-- This does not work because the meta is unsolved when `updateRecord` tries to do +-- its thing. We would need to defer elab to get this to work - insert placeholder +-- and solve it later. +infer ctx tm@(RUpdateRec fc _ _) = do + error fc "I can't infer record updates" + -- mvar <- freshMeta ctx fc (VU emptyFC) Normal + -- a <- eval ctx.env CBN mvar + -- let ty = VPi fc ":ins" Explicit Many a (MkClosure ctx.env mvar) + -- tm <- check ctx tm ty + -- pure (tm, ty) + infer ctx (RVar fc nm) = go 0 ctx.types where go : Int -> List (String × Val) -> M (Tm × Val) diff --git a/src/Lib/Parser.newt b/src/Lib/Parser.newt index c7a3aec..3b0453b 100644 --- a/src/Lib/Parser.newt +++ b/src/Lib/Parser.newt @@ -110,6 +110,8 @@ asAtom = do Nothing => pure $ RVar fc nm -- the inside of Raw +recordUpdate : Parser Raw + atom : Parser Raw atom = do pure MkUnit @@ -122,14 +124,34 @@ atom = do <|> RImplicit <$> getPos <* keyword "_" <|> RHole <$> getPos <* keyword "?" <|> parenWrap typeExpr + <|> recordUpdate + +updateClause : Parser UpdateClause +updateClause = do + fc <- getPos + nm <- ident + op <- True <$ symbol ":=" <|> False <$ symbol "$=" + tm <- term + case op of + True => pure $ AssignField fc nm tm + _ => pure $ ModifyField fc nm tm + +-- ambiguity vs {a} or {a} -> ... is tough, we can do [] or put a keyword in front. +recordUpdate = do + fc <- getPos + symbol "[" + clauses <- sepBy (symbol ";") updateClause + symbol "]" + tm <- optional atom + pure $ RUpdateRec fc clauses tm -- Argument to a Spine pArg : Parser (Icit × FC × Raw) pArg = do fc <- getPos - (\x => Explicit, fc, x) <$> atom - <|> (\x => Implicit, fc, x) <$> braces typeExpr + (\x => Implicit, fc, x) <$> braces typeExpr <|> (\x => Auto, fc, x) <$> dbraces typeExpr + <|> (\x => Explicit, fc, x) <$> atom AppSpine : U AppSpine = List (Icit × FC × Raw) diff --git a/src/Lib/Syntax.newt b/src/Lib/Syntax.newt index 2dfd80c..9cd14ef 100644 --- a/src/Lib/Syntax.newt +++ b/src/Lib/Syntax.newt @@ -55,6 +55,7 @@ record Clause where data RCaseAlt = MkAlt Raw Raw +data UpdateClause = AssignField FC String Raw | ModifyField FC String Raw data DoStmt : U where DoExpr : (fc : FC) -> Raw -> DoStmt @@ -64,7 +65,7 @@ data DoStmt : U where Decl : U data Raw : U where RVar : (fc : FC) -> (nm : Name) -> Raw - RLam : (fc : FC) -> BindInfo -> (ty : Raw) -> Raw + RLam : (fc : FC) -> BindInfo -> (sc : Raw) -> Raw RApp : (fc : FC) -> (t : Raw) -> (u : Raw) -> (icit : Icit) -> Raw RU : (fc : FC) -> Raw RPi : (fc : FC) -> BindInfo -> (ty : Raw) -> (sc : Raw) -> Raw @@ -78,6 +79,9 @@ data Raw : U where RIf : (fc : FC) -> Raw -> Raw -> Raw -> Raw RWhere : (fc : FC) -> (List Decl) -> Raw -> Raw RAs : (fc : FC) -> Name -> Raw -> Raw + -- has to be applied or we have to know its type as Foo → Foo to elaborate. + -- I can bake the arg in here, or require an app in elab. + RUpdateRec : (fc : FC) → List UpdateClause → Maybe Raw → Raw instance HasFC Raw where getFC (RVar fc nm) = fc @@ -95,6 +99,7 @@ instance HasFC Raw where getFC (RIf fc _ _ _) = fc getFC (RWhere fc _ _) = fc getFC (RAs fc _ _) = fc + getFC (RUpdateRec fc _ _) = fc data Import = MkImport FC Name @@ -184,10 +189,14 @@ instance Show Pattern where instance Show RCaseAlt where show (MkAlt x y)= foo ("MkAlt" :: show x :: show y :: Nil) +instance Show UpdateClause where + show (ModifyField _ nm tm) = foo ("ModifyField" :: nm :: show tm :: Nil) + show (AssignField _ nm tm) = foo ("AssignField" :: nm :: show tm :: Nil) instance Show Raw where show (RImplicit _) = "_" show (RHole _) = "?" + show (RUpdateRec _ clauses tm) = foo ("RUpdateRec" :: show clauses :: show tm :: Nil) show (RVar _ name) = foo ("RVar" :: show name :: Nil) show (RAnn _ t ty) = foo ( "RAnn" :: show t :: show ty :: Nil) show (RLit _ x) = foo ( "RLit" :: show x :: Nil) @@ -257,6 +266,7 @@ instance Pretty Raw where asDoc p (RIf _ x y z) = par p 0 $ text "if" <+> asDoc 0 x <+/> text "then" <+> asDoc 0 y <+/> text "else" <+> asDoc 0 z asDoc p (RWhere _ dd b) = text "TODO pretty where" asDoc p (RAs _ nm x) = text nm ++ text "@(" ++ asDoc 0 x ++ text ")" + asDoc p (RUpdateRec _ clauses tm) = text "{" <+> text "TODO RUpdateRec" <+> text "}" prettyBind : (BindInfo × Raw) -> Doc prettyBind (BI _ nm icit quant, ty) = wrap icit (text (show quant ++ nm) <+> text ":" <+> pretty ty) diff --git a/src/Lib/Tokenizer.newt b/src/Lib/Tokenizer.newt index 472908e..01e5504 100644 --- a/src/Lib/Tokenizer.newt +++ b/src/Lib/Tokenizer.newt @@ -14,7 +14,7 @@ import Data.String import Data.SnocList standalone : List Char -standalone = unpack "()\\{}[],.@" +standalone = unpack "()\\{}[],.@;" keywords : List String keywords = ("let" :: "in" :: "where" :: "case" :: "of" :: "data" :: "U" :: "do" :: @@ -25,7 +25,8 @@ keywords = ("let" :: "in" :: "where" :: "case" :: "of" :: "data" :: "U" :: "do" -- it would be nice to find a way to unkeyword "." so it could be -- used as an operator too "$" :: "λ" :: "?" :: "@" :: "." :: - "->" :: "→" :: ":" :: "=>" :: ":=" :: "=" :: "<-" :: "\\" :: "_" :: "|" :: Nil) + "->" :: "→" :: ":" :: "=>" :: ":=" :: "$=" + :: "=" :: "<-" :: "\\" :: "_" :: "|" :: Nil) record TState where constructor TS diff --git a/src/Main.newt b/src/Main.newt index 29c4fef..0d350b8 100644 --- a/src/Main.newt +++ b/src/Main.newt @@ -103,7 +103,7 @@ processModule importFC base stk qn@(QN ns nm) = do let name = joinBy "." modns let (Nothing) = lookupMap modns top.modules | _ => pure "" -- dummy entry for processing - modifyTop (\ top => MkTop (updateMap modns (emptyModCtx "") top.modules) top.imported top.hints top.ns top.defs top.metaCtx top.verbose top.errors top.ops) + modifyTop [modules := updateMap modns (emptyModCtx "") top.modules] let fn = (joinBy "/" (base :: ns)) ++ "/" ++ nm ++ ".newt" (Right src) <- liftIO {M} $ readFile fn | Left err => exitFailure "ERROR at \{show importFC}: error reading \{fn}: \{show err}" @@ -143,11 +143,10 @@ processModule importFC base stk qn@(QN ns nm) = do | Just mod => do let modules = updateMap modns mod top.modules - modifyTop (\ top => - -- FIXME - we don't want stray operators in a module. - -- inject module ops into top - let ops = foldMap const top.ops $ toList mod.ctxOps - in MkTop modules top.imported top.hints top.ns top.defs top.metaCtx top.verbose top.errors ops) + -- FIXME - we don't want stray operators in a module. + -- inject module ops into top + let ops = foldMap const top.ops $ toList mod.ctxOps + modifyTop [modules := modules; ops := ops ] pure src -- why am I returning this? log 1 $ \ _ => "MODNS " ++ show modns @@ -176,7 +175,7 @@ processModule importFC base stk qn@(QN ns nm) = do else pure MkUnit let modules = updateMap modns mod top.modules - modifyTop (\ top => MkTop modules top.imported top.hints top.ns top.defs top.metaCtx top.verbose top.errors top.ops) + modifyTop [modules := modules] (Nil) <- liftIO {M} $ readIORef top.errors | errors => do @@ -252,7 +251,7 @@ cmdLine : List String -> M (Maybe String × List String) cmdLine Nil = pure (Nothing, Nil) cmdLine ("--top" :: args) = cmdLine args -- handled later cmdLine ("-v" :: args) = do - modifyTop (\ top => MkTop top.modules top.imported top.hints top.ns top.defs top.metaCtx (top.verbose + 1) top.errors top.ops) + modifyTop [ verbose $= _+_ 1 ] cmdLine args cmdLine ("-o" :: fn :: args) = do (out, files) <- cmdLine args diff --git a/tests/RUTest.newt b/tests/RUTest.newt new file mode 100644 index 0000000..183cf1a --- /dev/null +++ b/tests/RUTest.newt @@ -0,0 +1,19 @@ +module RUTest + +import Prelude + +record Foo where + constructor MkFoo + bar : Nat + baz : Nat + +blah : Foo → Foo +blah x = [ bar := Z ] x + +main : IO Unit +main = do + let x = blah $ MkFoo (S Z) (S (S Z)) + printLn x.bar + -- this is unfortunate, it can't get record type from a meta + let x' = the Foo $ [ baz := Z ] x + printLn x'.baz diff --git a/tests/RUTest.newt.golden b/tests/RUTest.newt.golden new file mode 100644 index 0000000..12decc1 --- /dev/null +++ b/tests/RUTest.newt.golden @@ -0,0 +1,2 @@ +0 +3