diff options
Diffstat (limited to 'src/LambdaCube/Compiler/Infer.hs')
-rw-r--r-- | src/LambdaCube/Compiler/Infer.hs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/LambdaCube/Compiler/Infer.hs b/src/LambdaCube/Compiler/Infer.hs index f726f30b..6d26cedd 100644 --- a/src/LambdaCube/Compiler/Infer.hs +++ b/src/LambdaCube/Compiler/Infer.hs | |||
@@ -201,11 +201,11 @@ neutType' te = \case | |||
201 | Fun s a _ -> foldlrev appTy (nType s) a | 201 | Fun s a _ -> foldlrev appTy (nType s) a |
202 | 202 | ||
203 | makeCaseFunPars te n = case neutType te n of | 203 | makeCaseFunPars te n = case neutType te n of |
204 | (hnf -> TyCon (TyConName _ _ _ _ (CaseFunName _ _ pars)) xs) -> take pars xs | 204 | (hnf -> TyCon (TyConName _ _ _ _ (CaseFunName _ _ pars)) xs) -> take pars $ reverse xs |
205 | x -> error $ "makeCaseFunPars: " ++ ppShow x | 205 | x -> error $ "makeCaseFunPars: " ++ ppShow x |
206 | 206 | ||
207 | makeCaseFunPars' te n = case neutType' te n of | 207 | makeCaseFunPars' te n = case neutType' te n of |
208 | (hnf -> TyCon (TyConName _ _ _ _ (CaseFunName _ _ pars)) xs) -> take pars xs | 208 | (hnf -> TyCon (TyConName _ _ _ _ (CaseFunName _ _ pars)) xs) -> take pars $ reverse xs |
209 | 209 | ||
210 | -------------------------------------------------------------------------------- inference | 210 | -------------------------------------------------------------------------------- inference |
211 | 211 | ||
@@ -261,7 +261,7 @@ inferN_ tellTrace = infer where | |||
261 | = infer te $ x `SAppV` SLamV (STyped (ET (substTo (v+1) (Var 0) $ up 1 t) TType)) `SAppV` a `SAppV` b `SAppV` SVar siv v | 261 | = infer te $ x `SAppV` SLamV (STyped (ET (substTo (v+1) (Var 0) $ up 1 t) TType)) `SAppV` a `SAppV` b `SAppV` SVar siv v |
262 | -- temporal hack | 262 | -- temporal hack |
263 | | x@(SGlobal (sName -> CaseName "'VecS")) `SAppV` SLamV (SLamV (Wildcard _)) `SAppV` a `SAppV` b `SAppV` c `SAppV` SVar siv v <- e | 263 | | x@(SGlobal (sName -> CaseName "'VecS")) `SAppV` SLamV (SLamV (Wildcard _)) `SAppV` a `SAppV` b `SAppV` c `SAppV` SVar siv v <- e |
264 | , TyConN (FTag F'VecS) [_, Var n'] <- snd $ varType "xx" v te | 264 | , TyConN (FTag F'VecS) [Var n', _] <- snd $ varType "xx" v te |
265 | = infer te $ x `SAppV` SLamV (SLamV (STyped (ET (substTo (n'+2) (Var 1) $ up 2 t) TType))) `SAppV` a `SAppV` b `SAppV` c `SAppV` SVar siv v | 265 | = infer te $ x `SAppV` SLamV (SLamV (STyped (ET (substTo (n'+2) (Var 1) $ up 2 t) TType))) `SAppV` a `SAppV` b `SAppV` c `SAppV` SVar siv v |
266 | 266 | ||
267 | {- | 267 | {- |
@@ -471,8 +471,8 @@ recheck' sn e (ET x xt) = ET (recheck_ "main" (checkEnv e) (ET x xt)) xt | |||
471 | ET (Neut (App__ md a b)) zt | 471 | ET (Neut (App__ md a b)) zt |
472 | | ET (Neut a') at <- recheck'' "app1" te $ ET (Neut a) (neutType te a) | 472 | | ET (Neut a') at <- recheck'' "app1" te $ ET (Neut a) (neutType te a) |
473 | -> checkApps "a" [] zt (Neut . App__ md a' . head) te at [b] | 473 | -> checkApps "a" [] zt (Neut . App__ md a' . head) te at [b] |
474 | ET (Con_ md s n as) zt -> checkApps (ppShow s) [] zt (Con_ md s n . drop (conParams s)) te (conType zt s) $ mkConPars n zt ++ as | 474 | ET (Con_ md s n as) zt -> checkApps (ppShow s) [] zt (Con_ md s n . reverse . drop (conParams s)) te (conType zt s) $ mkConPars n zt ++ reverse as |
475 | ET (TyCon_ md s as) zt -> checkApps (ppShow s) [] zt (TyCon_ md s) te (nType s) as | 475 | ET (TyCon_ md s as) zt -> checkApps (ppShow s) [] zt (TyCon_ md s . reverse) te (nType s) $ reverse as |
476 | ET (Neut (CaseFun__ fs s@(CaseFunName _ t pars) as n)) zt -> checkApps (ppShow s) [] zt (\xs -> evalCaseFun fs s (init $ drop pars xs) (last xs)) te (nType s) (makeCaseFunPars te n ++ as ++ [Neut n]) | 476 | ET (Neut (CaseFun__ fs s@(CaseFunName _ t pars) as n)) zt -> checkApps (ppShow s) [] zt (\xs -> evalCaseFun fs s (init $ drop pars xs) (last xs)) te (nType s) (makeCaseFunPars te n ++ as ++ [Neut n]) |
477 | ET (Neut (TyCaseFun__ fs s [m, t, f] n)) zt -> checkApps (ppShow s) [] zt (\[m, t, n, f] -> evalTyCaseFun_ fs s [m, t, f] n) te (nType s) [m, t, Neut n, f] | 477 | ET (Neut (TyCaseFun__ fs s [m, t, f] n)) zt -> checkApps (ppShow s) [] zt (\[m, t, n, f] -> evalTyCaseFun_ fs s [m, t, f] n) te (nType s) [m, t, Neut n, f] |
478 | ET (Neut (Fun_ md f a x)) zt -> checkApps ("lab-" ++ show f ++ ppShow a ++ "\n" ++ ppShow (nType f)) [] zt (\xs -> Neut $ Fun_ md f (reverse xs) x) te (nType f) $ reverse a -- TODO: recheck x | 478 | ET (Neut (Fun_ md f a x)) zt -> checkApps ("lab-" ++ show f ++ ppShow a ++ "\n" ++ ppShow (nType f)) [] zt (\xs -> Neut $ Fun_ md f (reverse xs) x) te (nType f) $ reverse a -- TODO: recheck x |
@@ -564,7 +564,7 @@ handleStmt = \case | |||
564 | e2 <- addToEnv (SIName (sourceInfo s) $ CaseName (sName s)) $ ET (lamify ct $ \xs -> evalCaseFun' cfn (init $ drop (length ps) xs) (last xs)) ct | 564 | e2 <- addToEnv (SIName (sourceInfo s) $ CaseName (sName s)) $ ET (lamify ct $ \xs -> evalCaseFun' cfn (init $ drop (length ps) xs) (last xs)) ct |
565 | let ps' = fst $ getParams vty | 565 | let ps' = fst $ getParams vty |
566 | t = (TType :~> TType) | 566 | t = (TType :~> TType) |
567 | :~> addParams ps' (Var (length ps') `app_` TyCon tcn (downTo 0 $ length ps')) | 567 | :~> addParams ps' (Var (length ps') `app_` TyCon tcn (downTo' 0 $ length ps')) |
568 | :~> TType | 568 | :~> TType |
569 | :~> Var 2 `app_` Var 0 | 569 | :~> Var 2 `app_` Var 0 |
570 | :~> Var 3 `app_` Var 1 | 570 | :~> Var 3 `app_` Var 1 |