forked from GitHub/gf-core
generalize the syntax for pre patterns
This commit is contained in:
@@ -213,6 +213,13 @@ inferLType gr g trm = case trm of
|
|||||||
aa' <- flip mapM aa (\ (c,v) -> do
|
aa' <- flip mapM aa (\ (c,v) -> do
|
||||||
c' <- justCheck g c typeStr
|
c' <- justCheck g c typeStr
|
||||||
v' <- checks $ map (justCheck g v) [typeStrs, EPattType 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 (c',v'))
|
||||||
return (Alts t' aa', typeStr)
|
return (Alts t' aa', typeStr)
|
||||||
|
|
||||||
|
|||||||
@@ -563,3 +563,20 @@ topoSortJments2 (m,mi) = do
|
|||||||
(topoTest2 (allDependencies (==m) (jments mi)))
|
(topoTest2 (allDependencies (==m) (jments mi)))
|
||||||
return
|
return
|
||||||
[[(i,info) | i<-is,Just info<-[Map.lookup i (jments mi)]] | is<-iss]
|
[[(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"
|
||||||
|
|||||||
@@ -811,16 +811,6 @@ mkAlts cs = case cs of
|
|||||||
mkAlt (p,t) = do
|
mkAlt (p,t) = do
|
||||||
ss <- mkStrs p
|
ss <- mkStrs p
|
||||||
return (t,ss)
|
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 :: Posn -> Posn -> x -> L x
|
||||||
mkL (Pn l1 _) (Pn l2 _) x = L (Local l1 l2) x
|
mkL (Pn l1 _) (Pn l2 _) x = L (Local l1 l2) x
|
||||||
|
|||||||
Reference in New Issue
Block a user