mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-10 05:29:30 -06:00
54 lines
1.4 KiB
Haskell
54 lines
1.4 KiB
Haskell
----------------------------------------------------------------------
|
|
-- |
|
|
-- Module : LookAbs
|
|
-- Maintainer : AR
|
|
-- Stability : (stable)
|
|
-- Portability : (portable)
|
|
--
|
|
-- > CVS $Date: 2005/04/28 16:42:48 $
|
|
-- > CVS $Author: aarne $
|
|
-- > CVS $Revision: 1.14 $
|
|
--
|
|
-- (Description of the module)
|
|
-----------------------------------------------------------------------------
|
|
|
|
module GF.Grammar.LookAbs (
|
|
lookupFunType,
|
|
lookupCatContext
|
|
) where
|
|
|
|
import GF.Data.Operations
|
|
import GF.Grammar.Abstract
|
|
import GF.Infra.Ident
|
|
|
|
import GF.Infra.Modules
|
|
|
|
import Data.List (nub)
|
|
import Control.Monad
|
|
|
|
-- | this is needed at compile time
|
|
lookupFunType :: Grammar -> Ident -> Ident -> Err Type
|
|
lookupFunType gr m c = do
|
|
mi <- lookupModule gr m
|
|
case mi of
|
|
ModMod mo -> do
|
|
info <- lookupIdentInfo mo c
|
|
case info of
|
|
AbsFun (Yes t) _ -> return t
|
|
AnyInd _ n -> lookupFunType gr n c
|
|
_ -> prtBad "cannot find type of" c
|
|
_ -> Bad $ prt m +++ "is not an abstract module"
|
|
|
|
-- | this is needed at compile time
|
|
lookupCatContext :: Grammar -> Ident -> Ident -> Err Context
|
|
lookupCatContext gr m c = do
|
|
mi <- lookupModule gr m
|
|
case mi of
|
|
ModMod mo -> do
|
|
info <- lookupIdentInfo mo c
|
|
case info of
|
|
AbsCat (Yes co) _ -> return co
|
|
AnyInd _ n -> lookupCatContext gr n c
|
|
_ -> prtBad "unknown category" c
|
|
_ -> Bad $ prt m +++ "is not an abstract module"
|