summaryrefslogtreecommitdiff
path: root/src/LambdaCube/Compiler/CoreToIR.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/LambdaCube/Compiler/CoreToIR.hs')
-rw-r--r--src/LambdaCube/Compiler/CoreToIR.hs19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/LambdaCube/Compiler/CoreToIR.hs b/src/LambdaCube/Compiler/CoreToIR.hs
index d24a7b11..353560cd 100644
--- a/src/LambdaCube/Compiler/CoreToIR.hs
+++ b/src/LambdaCube/Compiler/CoreToIR.hs
@@ -865,7 +865,7 @@ mkLam _ = Nothing
865 865
866mkCon (ExpTV (I.Con s n xs) et vs) = Just (untick $ show s, chain vs (I.conType et s) $ I.mkConPars n et ++ xs) 866mkCon (ExpTV (I.Con s n xs) et vs) = Just (untick $ show s, chain vs (I.conType et s) $ I.mkConPars n et ++ xs)
867mkCon (ExpTV (I.TyCon s xs) et vs) = Just (untick $ show s, chain vs (nType s) xs) 867mkCon (ExpTV (I.TyCon s xs) et vs) = Just (untick $ show s, chain vs (nType s) xs)
868mkCon (ExpTV (I.Neut (I.Fun s@(I.FunName _ 0 _{-I.DeltaDef{}-} _) (reverse -> xs) def)) et vs) = Just (untick $ show s, chain vs (nType s) xs) 868mkCon (ExpTV (I.Neut (I.Fun s@(I.FunName _ loc _{-I.DeltaDef{}-} _) (reverse -> xs) def)) et vs) = Just (untick $ show s, drop loc $ chain vs (nType s) xs)
869mkCon (ExpTV (I.CaseFun s xs n) et vs) = Just (untick $ show s, chain vs (nType s) $ makeCaseFunPars' (mkEnv vs) n ++ xs ++ [I.Neut n]) 869mkCon (ExpTV (I.CaseFun s xs n) et vs) = Just (untick $ show s, chain vs (nType s) $ makeCaseFunPars' (mkEnv vs) n ++ xs ++ [I.Neut n])
870mkCon (ExpTV (I.TyCaseFun s [m, t, f] n) et vs) = Just (untick $ show s, chain vs (nType s) [m, t, I.Neut n, f]) 870mkCon (ExpTV (I.TyCaseFun s [m, t, f] n) et vs) = Just (untick $ show s, chain vs (nType s) [m, t, I.Neut n, f])
871mkCon _ = Nothing 871mkCon _ = Nothing
@@ -878,15 +878,28 @@ removeRHS 0 (I.RHS x) = Just x
878removeRHS n (I.Lam x) | n > 0 = I.Lam <$> removeRHS (n-1) x 878removeRHS n (I.Lam x) | n > 0 = I.Lam <$> removeRHS (n-1) x
879removeRHS _ _ = Nothing 879removeRHS _ _ = Nothing
880 880
881mkFunc r@(ExpTV (I.Neut (I.Fun (I.FunName (show -> n) 0 (I.ExpDef def_) nt) xs I.RHS{})) ty vs) 881mkFunc r@(ExpTV (I.Neut (I.Fun (I.FunName (show -> n) loc (I.ExpDef def_) nt) xs I.RHS{})) ty vs)
882 | Just def <- removeRHS (length xs) def_ 882 | Just def <- removeRHS (length xs) def_
883 , all (supType . tyOf) (r: xs') && n `notElem` ["typeAnn"] && all validChar n 883 , all (supType . tyOf) (r: xs') && n `notElem` ["typeAnn"] && all validChar n
884 = Just (untick n +++ intercalate "_" (filter (/="TT") $ map (filter isAlphaNum . plainShow) hs), toExp $ I.ET (foldl I.app_ def hs) (foldl I.appTy nt hs), tyOf r, xs') 884 = Just (untick n +++ intercalate "_" (filter (/="TT") $ map (filter isAlphaNum . plainShow) hs), toExp $ I.ET (foldl I.app_ def hs) (foldl I.appTy nt hs), tyOf r, xs')
885 where 885 where
886 a +++ [] = a 886 a +++ [] = a
887 a +++ b = a ++ "_" ++ b 887 a +++ b = a ++ "_" ++ b
888 (map (expOf . snd) -> hs, map snd -> xs') = span ((==Hidden) . fst) $ chain' vs nt $ reverse xs 888 (map (expOf . snd) -> hs, map snd -> xs') = splitAt loc $ chain' vs nt $ reverse xs
889 validChar = isAlphaNum 889 validChar = isAlphaNum
890{-
891mkFunc r@(ExpTV (I.Neut (I.Fun (I.FunName (show -> n) loc (I.ExpDef def_) nt) xs I.RHS{})) ty vs)
892 | Just def <- removeRHS (length xs) def_
893 , all validChar n
894 = tracePShow (text n, reverse xs, supType . tyOf <$> (r: xs')) Nothing
895 where
896 a +++ [] = a
897 a +++ b = a ++ "_" ++ b
898 (map (expOf . snd) -> hs, map snd -> xs') = splitAt loc $ chain' vs nt $ reverse xs
899 validChar = isAlphaNum
900mkFunc r@(ExpTV (I.Neut (I.Fun (I.FunName (show -> n) loc (I.ExpDef def_) nt) xs I.RHS{})) ty vs)
901 = tracePShow (text n, take loc $ reverse xs) Nothing
902-}
890mkFunc _ = Nothing 903mkFunc _ = Nothing
891 904
892chain vs t@(I.Pi Hidden at y) (a: as) = chain vs (I.appTy t a) as 905chain vs t@(I.Pi Hidden at y) (a: as) = chain vs (I.appTy t a) as