forked from GitHub/gf-core
+ References to modules under src/compiler have been eliminated from the PGF library (under src/runtime/haskell). Only two functions had to be moved (from GF.Data.Utilities to PGF.Utilities) to make this possible, other apparent dependencies turned out to be vacuous. + In gf.cabal, the GF executable no longer directly depends on the PGF library source directory, but only on the exposed library modules. This means that there is less duplication in gf.cabal and that the 30 modules in the PGF library will no longer be compiled twice while building GF. To make this possible, additional PGF library modules have been exposed, even though they should probably be considered for internal use only. They could be collected in a PGF.Internal module, or marked as "unstable", to make this explicit. + Also, by using the -fwarn-unused-imports flag, ~220 redundant imports were found and removed, reducing the total number of imports by ~15%.
97 lines
2.2 KiB
Haskell
97 lines
2.2 KiB
Haskell
----------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Values
|
|
-- Maintainer : AR
|
|
-- Stability : (stable)
|
|
-- Portability : (portable)
|
|
--
|
|
-- > CVS $Date: 2005/04/21 16:22:32 $
|
|
-- > CVS $Author: bringert $
|
|
-- > CVS $Revision: 1.7 $
|
|
--
|
|
-- (Description of the module)
|
|
-----------------------------------------------------------------------------
|
|
|
|
module GF.Grammar.Values (-- * values used in TC type checking
|
|
Exp, Val(..), Env,
|
|
-- * annotated tree used in editing
|
|
--Z Tree, TrNode(..), Atom(..),
|
|
Binds, Constraints, MetaSubst,
|
|
-- * for TC
|
|
valAbsInt, valAbsFloat, valAbsString, vType,
|
|
isPredefCat,
|
|
eType,
|
|
--Z tree2exp, loc2treeFocus
|
|
) where
|
|
|
|
--import GF.Data.Operations
|
|
---Z import GF.Data.Zipper
|
|
|
|
import GF.Infra.Ident
|
|
import GF.Grammar.Grammar
|
|
import GF.Grammar.Predef
|
|
|
|
-- values used in TC type checking
|
|
|
|
type Exp = Term
|
|
|
|
data Val = VGen Int Ident | VApp Val Val | VCn QIdent | VRecType [(Label,Val)] | VType | VClos Env Exp
|
|
deriving (Eq,Show)
|
|
|
|
type Env = [(Ident,Val)]
|
|
|
|
{-
|
|
-- annotated tree used in editing
|
|
|
|
type Tree = Tr TrNode
|
|
|
|
newtype TrNode = N (Binds,Atom,Val,(Constraints,MetaSubst),Bool)
|
|
deriving (Eq,Show)
|
|
|
|
data Atom =
|
|
AtC Fun | AtM MetaId | AtV Ident | AtL String | AtI Integer | AtF Double
|
|
deriving (Eq,Show)
|
|
-}
|
|
type Binds = [(Ident,Val)]
|
|
type Constraints = [(Val,Val)]
|
|
type MetaSubst = [(MetaId,Val)]
|
|
|
|
|
|
-- for TC
|
|
|
|
valAbsInt :: Val
|
|
valAbsInt = VCn (cPredefAbs, cInt)
|
|
|
|
valAbsFloat :: Val
|
|
valAbsFloat = VCn (cPredefAbs, cFloat)
|
|
|
|
valAbsString :: Val
|
|
valAbsString = VCn (cPredefAbs, cString)
|
|
|
|
vType :: Val
|
|
vType = VType
|
|
|
|
eType :: Exp
|
|
eType = Sort cType
|
|
|
|
{-
|
|
tree2exp :: Tree -> Exp
|
|
tree2exp (Tr (N (bi,at,_,_,_),ts)) = foldr Abs (foldl App at' ts') bi' where
|
|
at' = case at of
|
|
AtC (m,c) -> Q m c
|
|
AtV i -> Vr i
|
|
AtM m -> Meta m
|
|
AtL s -> K s
|
|
AtI s -> EInt s
|
|
AtF s -> EFloat s
|
|
bi' = map fst bi
|
|
ts' = map tree2exp ts
|
|
|
|
loc2treeFocus :: Loc TrNode -> Tree
|
|
loc2treeFocus (Loc (Tr (a,ts),p)) =
|
|
loc2tree (Loc (Tr (mark a, map (mapTr nomark) ts), mapPath nomark p))
|
|
where
|
|
(mark, nomark) = (\(N (a,b,c,d,_)) -> N(a,b,c,d,True),
|
|
\(N (a,b,c,d,_)) -> N(a,b,c,d,False))
|
|
-}
|