forked from GitHub/gf-core
57 lines
1.8 KiB
Haskell
57 lines
1.8 KiB
Haskell
module GF.Compile.Compute.Value where
|
|
import GF.Grammar.Grammar(Label,Type,MetaId,Patt,QIdent)
|
|
import PGF.Internal(BindType)
|
|
import GF.Infra.Ident(Ident)
|
|
import Text.Show.Functions()
|
|
import Data.Ix(Ix)
|
|
|
|
-- | Self-contained (not quite) representation of values
|
|
data Value
|
|
= VApp Predefined [Value] -- from Q, always Predef.x, has a built-in value
|
|
| VCApp QIdent [Value] -- from QC, constructors
|
|
| VGen Int [Value] -- for lambda bound variables, possibly applied
|
|
| VMeta MetaId Env [Value]
|
|
-- -- | VClosure Env Term -- used in Typecheck.ConcreteNew
|
|
| VAbs BindType Ident Binding -- used in Compute.ConcreteNew
|
|
| VProd BindType Value Ident Binding -- used in Compute.ConcreteNew
|
|
| VInt Int
|
|
| VFloat Double
|
|
| VString String
|
|
| VSort Ident
|
|
| VImplArg Value
|
|
| VTblType Value Value
|
|
| VRecType [(Label,Value)]
|
|
| VRec [(Label,Value)]
|
|
| VV Type [Value] [Value] -- preserve type for conversion back to Term
|
|
| VT Wild Value [(Patt,Bind Env)]
|
|
| VC Value Value
|
|
| VS Value Value
|
|
| VP Value Label
|
|
| VPatt Patt
|
|
| VPattType Value
|
|
| VFV [Value]
|
|
| VAlts Value [(Value, Value)]
|
|
| VStrs [Value]
|
|
-- -- | VGlue Value Value -- hmm
|
|
-- -- | VExtR Value Value -- hmm
|
|
| VError String
|
|
deriving (Eq,Show)
|
|
|
|
type Wild = Bool
|
|
type Binding = Bind Value
|
|
data Bind a = Bind (a->Value) deriving Show
|
|
|
|
instance Eq (Bind a) where x==y = False
|
|
|
|
type Env = [(Ident,Value)]
|
|
|
|
-- | Predefined functions
|
|
data Predefined = Drop | Take | Tk | Dp | EqStr | Occur | Occurs | ToUpper
|
|
| ToLower | IsUpper | Length | Plus | EqInt | LessInt
|
|
{- | Show | Read | ToStr | MapStr | EqVal -}
|
|
| Error | Trace
|
|
-- Canonical values below:
|
|
| PBool | PFalse | PTrue | Int | Float | Ints | NonExist
|
|
| BIND | SOFT_BIND | SOFT_SPACE | CAPIT | ALL_CAPIT
|
|
deriving (Show,Eq,Ord,Ix,Bounded,Enum)
|