diff options
Diffstat (limited to 'src/LambdaCube/Compiler/CoreToIR.hs')
-rw-r--r-- | src/LambdaCube/Compiler/CoreToIR.hs | 19 |
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 | ||
866 | mkCon (ExpTV (I.Con s n xs) et vs) = Just (untick $ show s, chain vs (I.conType et s) $ I.mkConPars n et ++ xs) | 866 | mkCon (ExpTV (I.Con s n xs) et vs) = Just (untick $ show s, chain vs (I.conType et s) $ I.mkConPars n et ++ xs) |
867 | mkCon (ExpTV (I.TyCon s xs) et vs) = Just (untick $ show s, chain vs (nType s) xs) | 867 | mkCon (ExpTV (I.TyCon s xs) et vs) = Just (untick $ show s, chain vs (nType s) xs) |
868 | mkCon (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) | 868 | mkCon (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) |
869 | mkCon (ExpTV (I.CaseFun s xs n) et vs) = Just (untick $ show s, chain vs (nType s) $ makeCaseFunPars' (mkEnv vs) n ++ xs ++ [I.Neut n]) | 869 | mkCon (ExpTV (I.CaseFun s xs n) et vs) = Just (untick $ show s, chain vs (nType s) $ makeCaseFunPars' (mkEnv vs) n ++ xs ++ [I.Neut n]) |
870 | mkCon (ExpTV (I.TyCaseFun s [m, t, f] n) et vs) = Just (untick $ show s, chain vs (nType s) [m, t, I.Neut n, f]) | 870 | mkCon (ExpTV (I.TyCaseFun s [m, t, f] n) et vs) = Just (untick $ show s, chain vs (nType s) [m, t, I.Neut n, f]) |
871 | mkCon _ = Nothing | 871 | mkCon _ = Nothing |
@@ -878,15 +878,28 @@ removeRHS 0 (I.RHS x) = Just x | |||
878 | removeRHS n (I.Lam x) | n > 0 = I.Lam <$> removeRHS (n-1) x | 878 | removeRHS n (I.Lam x) | n > 0 = I.Lam <$> removeRHS (n-1) x |
879 | removeRHS _ _ = Nothing | 879 | removeRHS _ _ = Nothing |
880 | 880 | ||
881 | mkFunc r@(ExpTV (I.Neut (I.Fun (I.FunName (show -> n) 0 (I.ExpDef def_) nt) xs I.RHS{})) ty vs) | 881 | mkFunc 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 | {- | ||
891 | mkFunc 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 | ||
900 | mkFunc 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 | -} | ||
890 | mkFunc _ = Nothing | 903 | mkFunc _ = Nothing |
891 | 904 | ||
892 | chain vs t@(I.Pi Hidden at y) (a: as) = chain vs (I.appTy t a) as | 905 | chain vs t@(I.Pi Hidden at y) (a: as) = chain vs (I.appTy t a) as |