summaryrefslogtreecommitdiff
path: root/src/LambdaCube/Compiler/Infer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/LambdaCube/Compiler/Infer.hs')
-rw-r--r--src/LambdaCube/Compiler/Infer.hs12
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
203makeCaseFunPars te n = case neutType te n of 203makeCaseFunPars 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
207makeCaseFunPars' te n = case neutType' te n of 207makeCaseFunPars' 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