1
0
forked from GitHub/gf-core

generalize the syntax for pre patterns

This commit is contained in:
krangelov
2021-12-20 15:44:30 +01:00
parent 2be3fd7e78
commit f2b6f36e02
3 changed files with 24 additions and 10 deletions

View File

@@ -213,6 +213,13 @@ inferLType gr g trm = case trm of
aa' <- flip mapM aa (\ (c,v) -> do
c' <- justCheck g c typeStr
v' <- checks $ map (justCheck g v) [typeStrs, EPattType typeStr]
v' <- case v' of
Q q -> do t <- lookupResDef gr q
t <- normalForm gr t
case t of
EPatt _ _ p -> mkStrs p
_ -> return v'
_ -> return v'
return (c',v'))
return (Alts t' aa', typeStr)

View File

@@ -563,3 +563,20 @@ topoSortJments2 (m,mi) = do
(topoTest2 (allDependencies (==m) (jments mi)))
return
[[(i,info) | i<-is,Just info<-[Map.lookup i (jments mi)]] | is<-iss]
mkStrs p = case p of
PAlt a b -> do
Strs as <- mkStrs a
Strs bs <- mkStrs b
return $ Strs $ as ++ bs
PSeq _ _ a _ _ b ->
do Strs as <- mkStrs a
Strs bs <- mkStrs b
return $ Strs $ [K (a++b) | K a <- as, K b <- bs]
PString s -> return $ Strs [K s]
PChars cs -> return $ Strs [K [c] | c <- cs]
PV x -> return (Vr x) --- for macros; not yet complete
PMacro x -> return (Vr x) --- for macros; not yet complete
PM c -> return (Q c) --- for macros; not yet complete
_ -> fail "no strs from pattern"

View File

@@ -811,16 +811,6 @@ mkAlts cs = case cs of
mkAlt (p,t) = do
ss <- mkStrs p
return (t,ss)
mkStrs p = case p of
PAlt a b -> do
Strs as <- mkStrs a
Strs bs <- mkStrs b
return $ Strs $ as ++ bs
PString s -> return $ Strs [K s]
PV x -> return (Vr x) --- for macros; not yet complete
PMacro x -> return (Vr x) --- for macros; not yet complete
PM c -> return (Q c) --- for macros; not yet complete
_ -> fail "no strs from pattern"
mkL :: Posn -> Posn -> x -> L x
mkL (Pn l1 _) (Pn l2 _) x = L (Local l1 l2) x