summaryrefslogtreecommitdiff
path: root/src/GF/Canon/CMacros.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2005-12-11 17:48:55 +0000
committeraarne <aarne@cs.chalmers.se>2005-12-11 17:48:55 +0000
commit9f867c4922cccb6e61b273a55103e2afaeac4bde (patch)
treeb31dba589c596b272d0e6ad0fec7079cd0d92ab5 /src/GF/Canon/CMacros.hs
parent8ee11c0e7edaa32b606ac96ec24cc2f8d0bca2e3 (diff)
float parsing fixed
Diffstat (limited to 'src/GF/Canon/CMacros.hs')
-rw-r--r--src/GF/Canon/CMacros.hs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/GF/Canon/CMacros.hs b/src/GF/Canon/CMacros.hs
index 2facd6e65..bb80fb0fa 100644
--- a/src/GF/Canon/CMacros.hs
+++ b/src/GF/Canon/CMacros.hs
@@ -227,6 +227,20 @@ allLinValues trm = do
lts <- allLinFields trm
mapM (mapPairsM (return . allCaseValues)) lts
+-- | to gather all fields; does not assume s naming of fields;
+-- used in Morpho only
+allAllLinValues :: Term -> Err [[(Label,[([Patt],Term)])]]
+allAllLinValues trm = do
+ lts <- allFields trm
+ mapM (mapPairsM (return . allCaseValues)) lts
+ where
+ allFields trm = case trm of
+ R rs -> return [[(l,t) | Ass l t <- rs]]
+ FV ts -> do
+ lts <- mapM allFields ts
+ return $ concat lts
+ _ -> prtBad "fields can only be sought in a record not in" trm
+
-- | to gather all linearizations, even from nested records; params ignored
allLinBranches :: Term -> [([Label],Term)]
allLinBranches trm = case trm of