AoC todos and tweaks
This commit is contained in:
@@ -526,6 +526,7 @@ unify env mode t u = do
|
||||
unifyVar : Val -> Val -> M UnifyResult
|
||||
unifyVar t'@(VVar fc k sp) u'@(VVar fc' k' sp') =
|
||||
if k == k' then unifySpine env mode (k == k') sp sp'
|
||||
-- FIXME - get some names in here.
|
||||
else error fc "Failed to unify \{show t'} and \{show u'}"
|
||||
|
||||
unifyVar t'@(VVar fc k Lin) u = do
|
||||
|
||||
@@ -44,8 +44,10 @@ eraseSpine env t ((fc, arg) :: args) _ = do
|
||||
eraseSpine env (App fc t u) args Nothing
|
||||
|
||||
doAlt : EEnv -> CaseAlt -> M CaseAlt
|
||||
-- REVIEW do we extend env?
|
||||
-- REVIEW we're sticking Erased on RHS for impossible, might want a runtime error or elide the case.
|
||||
doAlt env (CaseDefault (Erased fc)) = pure $ CaseDefault (Erased fc)
|
||||
doAlt env (CaseDefault t) = CaseDefault <$> erase env t Nil
|
||||
doAlt env (CaseCons name args (Erased fc)) = pure (CaseCons name args (Erased fc))
|
||||
doAlt env (CaseCons name args t) = do
|
||||
top <- getTop
|
||||
let (Just (MkEntry _ str type def _)) = lookup name top
|
||||
|
||||
@@ -56,6 +56,7 @@ quoteTokenise ts@(TS el ec toks chars) startl startc acc = case chars of
|
||||
-- TODO newline in string should be an error
|
||||
'\n' :: cs => Left $ E (MkFC "" (MkBounds el ec el ec)) "Newline in string"
|
||||
'\\' :: 'n' :: cs => quoteTokenise (TS el (ec + 2) toks cs) startl startc (acc :< '\n')
|
||||
'\\' :: 't' :: cs => quoteTokenise (TS el (ec + 2) toks cs) startl startc (acc :< chr 9)
|
||||
'\\' :: c :: cs => quoteTokenise (TS el (ec + 2) toks cs) startl startc (acc :< c)
|
||||
c :: cs => quoteTokenise (TS el (ec + 1) toks cs) startl startc (acc :< c)
|
||||
Nil => Left $ E (MkFC "" (MkBounds el ec el ec)) "Expected '\"' at EOF"
|
||||
@@ -103,7 +104,10 @@ rawTokenise ts@(TS sl sc toks chars) = case chars of
|
||||
'_' :: ',' :: '_' :: cs => rawTokenise (TS sl (sc + 3) (toks :< mktok False sl (sc + 3) MixFix "_,_") cs)
|
||||
'_' :: '.' :: '_' :: cs => rawTokenise (TS sl (sc + 3) (toks :< mktok False sl (sc + 3) MixFix "_._") cs)
|
||||
'\'' :: '\\' :: c :: '\'' :: cs =>
|
||||
let ch = ite (c == 'n') '\n' c
|
||||
let ch = case c of
|
||||
'n' => '\n'
|
||||
't' => chr 9
|
||||
c => c
|
||||
in rawTokenise (TS sl (sc + 4) (toks :< mktok False sl (sc + 4) Character (singleton ch)) cs)
|
||||
'\'' :: c :: '\'' :: cs => rawTokenise (TS sl (sc + 3) (toks :< mktok False sl (sc + 3) Character (singleton c)) cs)
|
||||
'#' :: cs => doRest (TS sl (sc + 1) toks cs) Pragma isIdent (Lin :< '#')
|
||||
|
||||
@@ -787,7 +787,7 @@ instance Cast Int Nat where
|
||||
cast n = intToNat n
|
||||
|
||||
instance Show Char where
|
||||
show c = jsShow c
|
||||
show c = "'\{jsShow c}'"
|
||||
|
||||
swap : ∀ a b. a × b → b × a
|
||||
swap (a,b) = (b,a)
|
||||
@@ -885,7 +885,7 @@ ignore = map (const MkUnit)
|
||||
|
||||
instance ∀ a. {{Show a}} → Show (Maybe a) where
|
||||
show Nothing = "Nothing"
|
||||
show (Just a) = "Just {show a}"
|
||||
show (Just a) = "Just \{show a}"
|
||||
|
||||
pfunc isPrefixOf uses (True False): String → String → Bool := `(pfx, s) => s.startsWith(pfx) ? Prelude_True : Prelude_False`
|
||||
pfunc isSuffixOf uses (True False): String → String → Bool := `(pfx, s) => s.endsWith(pfx) ? Prelude_True : Prelude_False`
|
||||
|
||||
Reference in New Issue
Block a user