diff options
| author | aarne <unknown> | 2003-10-09 15:23:32 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2003-10-09 15:23:32 +0000 |
| commit | 2ee936c7e23bd690b05b8362179911a2d176f150 (patch) | |
| tree | 00e54d208f21b4f0278aab96ae551ecd6cae4abc /src/GF/UseGrammar/Transfer.hs | |
| parent | ddd103ccd7422c35b5af0bcb5bad5edd49b080bb (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.hs | 29 |
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) |
