summaryrefslogtreecommitdiff
path: root/src/GF/UseGrammar/Transfer.hs
diff options
context:
space:
mode:
authoraarne <unknown>2003-10-09 15:23:32 +0000
committeraarne <unknown>2003-10-09 15:23:32 +0000
commit2ee936c7e23bd690b05b8362179911a2d176f150 (patch)
tree00e54d208f21b4f0278aab96ae551ecd6cae4abc /src/GF/UseGrammar/Transfer.hs
parentddd103ccd7422c35b5af0bcb5bad5edd49b080bb (diff)
Added treatment of transfer modules. Aggregation is an example.
Diffstat (limited to 'src/GF/UseGrammar/Transfer.hs')
-rw-r--r--src/GF/UseGrammar/Transfer.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/GF/UseGrammar/Transfer.hs b/src/GF/UseGrammar/Transfer.hs
new file mode 100644
index 000000000..2551a039d
--- /dev/null
+++ b/src/GF/UseGrammar/Transfer.hs
@@ -0,0 +1,29 @@
+module Transfer where
+
+import Grammar
+import Values
+import AbsCompute
+import qualified GFC
+import LookAbs
+import MMacros
+import TypeCheck
+
+import Ident
+import Operations
+
+import Monad
+
+-- linearize, parse, etc, by transfer. AR 9/10/2003
+
+doTransfer :: GFC.CanonGrammar -> Ident -> Tree -> Err Tree
+doTransfer gr tra t = do
+ cat <- liftM snd $ val2cat $ valTree t
+ f <- lookupTransfer gr tra cat
+ e <- compute gr $ App f $ tree2exp t
+ annotate gr e
+
+useByTransfer :: (Tree -> Err a) -> GFC.CanonGrammar -> Ident -> (Tree -> Err a)
+useByTransfer lin gr tra t = doTransfer gr tra t >>= lin
+
+mkByTransfer :: (a -> Err [Tree]) -> GFC.CanonGrammar -> Ident -> (a -> Err [Tree])
+mkByTransfer parse gr tra s = parse s >>= mapM (doTransfer gr tra)