summaryrefslogtreecommitdiff
path: root/src/compiler/GF/Compile/Compute/Value.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/GF/Compile/Compute/Value.hs')
-rw-r--r--src/compiler/GF/Compile/Compute/Value.hs15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/GF/Compile/Compute/Value.hs b/src/compiler/GF/Compile/Compute/Value.hs
index 07d79ca26..bbc751ee4 100644
--- a/src/compiler/GF/Compile/Compute/Value.hs
+++ b/src/compiler/GF/Compile/Compute/Value.hs
@@ -3,10 +3,11 @@ import GF.Grammar.Grammar(Label,Type,TInfo,MetaId,Patt,QIdent)
import PGF.Data(BindType)
import GF.Infra.Ident(Ident)
import Text.Show.Functions
+import Data.Ix(Ix)
-- | Self-contained (not quite) representation of values
data Value
- = VApp QIdent [Value] -- from Q, always Predef.x, has a built-in 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]
@@ -22,7 +23,7 @@ data Value
| VRecType [(Label,Value)]
| VRec [(Label,Value)]
| VV Type [Value] [Value] -- preserve type for conversion back to Term
- | VT TInfo [(Patt,Bind Env)]
+ | VT Wild Value [(Patt,Bind Env)]
| VC Value Value
| VS Value Value
| VP Value Label
@@ -36,9 +37,19 @@ data Value
| 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
+ -- Canonical values below:
+ | PBool | PFalse | PTrue | Ints
+ deriving (Show,Eq,Ord,Ix,Bounded,Enum)