summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GF/Grammar/Macros.hs18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/GF/Grammar/Macros.hs b/src/GF/Grammar/Macros.hs
index 6f0ee3335..440a54562 100644
--- a/src/GF/Grammar/Macros.hs
+++ b/src/GF/Grammar/Macros.hs
@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/10/02 20:50:19 $
--- > CVS $Author: aarne $
--- > CVS $Revision: 1.23 $
+-- > CVS $Date: 2005/11/11 16:38:00 $
+-- > CVS $Author: bringert $
+-- > CVS $Revision: 1.24 $
--
-- Macros for constructing and analysing source code terms.
--
@@ -24,7 +24,7 @@ import GF.Grammar.Grammar
import GF.Infra.Ident
import GF.Grammar.PrGrammar
-import Control.Monad (liftM)
+import Control.Monad (liftM, liftM2)
import Data.Char (isDigit)
firstTypeForm :: Type -> Err (Context, Type)
@@ -259,14 +259,8 @@ prLabel :: Label -> String
prLabel = prt
mapAssignM :: Monad m => (Term -> m c) -> [Assign] -> m [(Label,(Maybe c,c))]
-mapAssignM f ltvs = do
- let (ls,tvs) = unzip ltvs
- (ts, vs) = unzip tvs
- ts' <- mapM (\t -> case t of
- Nothing -> return Nothing
- Just y -> f y >>= return . Just) ts
- vs' <- mapM f vs
- return (zip ls (zip ts' vs'))
+mapAssignM f = mapM (\ (ls,tv) -> liftM ((,) ls) (g tv))
+ where g (t,v) = liftM2 (,) (maybe (return Nothing) (liftM Just . f) t) (f v)
mkRecordN :: Int -> (Int -> Label) -> [Term] -> Term
mkRecordN int lab typs = R [ assign (lab i) t | (i,t) <- zip [int..] typs]