diff --git a/src/GF/Canon/CMacros.hs b/src/GF/Canon/CMacros.hs index bb80fb0fa..a61430512 100644 --- a/src/GF/Canon/CMacros.hs +++ b/src/GF/Canon/CMacros.hs @@ -151,7 +151,7 @@ matchPatt cs0 (FV ts) = liftM FV $ mapM (matchPatt cs0) ts matchPatt cs0 trm = term2patt trm >>= match cs0 where match cs t = case cs of - Cas ps b :_ | elem t ps -> return b + Cas ps b :_ | elem t ps -> return b _:cs' -> match cs' t [] -> Bad $ "pattern not found for" +++ prt t +++ "among" ++++ unlines (map prt cs0) ---- debug diff --git a/src/GF/Compile/CheckGrammar.hs b/src/GF/Compile/CheckGrammar.hs index 1480e4ddb..3ca7e68df 100644 --- a/src/GF/Compile/CheckGrammar.hs +++ b/src/GF/Compile/CheckGrammar.hs @@ -717,14 +717,14 @@ pattContext env typ p = case p of g1 <- pattContext env typ p g2 <- pattContext env typ q return $ g1 ++ g2 - PRep p' -> noBind p' - PNeg p' -> noBind p' + PRep p' -> noBind typeStr p' + PNeg p' -> noBind typ p' _ -> return [] ---- check types! where cnc = env - noBind p' = do - co <- pattContext env typeStr p' + noBind typ p' = do + co <- pattContext env typ p' if not (null co) then checkWarn ("no variable bound inside pattern" +++ prt p) >> return []