mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
added VGlue to cover the case where we can't precompute the glue
This commit is contained in:
@@ -66,6 +66,7 @@ data Value s
|
|||||||
| VFlt Double
|
| VFlt Double
|
||||||
| VStr String
|
| VStr String
|
||||||
| VC [Value s]
|
| VC [Value s]
|
||||||
|
| VGlue (Value s) (Value s)
|
||||||
| VPatt Int (Maybe Int) Patt
|
| VPatt Int (Maybe Int) Patt
|
||||||
| VPattType (Value s)
|
| VPattType (Value s)
|
||||||
|
|
||||||
@@ -133,7 +134,7 @@ eval env t@(Glue t1 t2) [] = do v1 <- eval env t1 []
|
|||||||
v2 <- eval env t2 []
|
v2 <- eval env t2 []
|
||||||
case liftM2 (++) (value2string v1) (value2string v2) of
|
case liftM2 (++) (value2string v1) (value2string v2) of
|
||||||
Just s -> return (string2value s)
|
Just s -> return (string2value s)
|
||||||
Nothing -> evalError ("Cannot reduce term" <+> pp t)
|
Nothing -> return (VGlue v1 v2)
|
||||||
eval env (EPatt min max p) [] = return (VPatt min max p)
|
eval env (EPatt min max p) [] = return (VPatt min max p)
|
||||||
eval env (EPattType t) [] = do v <- eval env t []
|
eval env (EPattType t) [] = do v <- eval env t []
|
||||||
return (VPattType v)
|
return (VPattType v)
|
||||||
@@ -323,6 +324,10 @@ value2term i (VC vs) = do
|
|||||||
case ts of
|
case ts of
|
||||||
[] -> return Empty
|
[] -> return Empty
|
||||||
(t:ts) -> return (foldl C t ts)
|
(t:ts) -> return (foldl C t ts)
|
||||||
|
value2term i (VGlue v1 v2) = do
|
||||||
|
t1 <- value2term i v1
|
||||||
|
t2 <- value2term i v2
|
||||||
|
return (Glue t1 t2)
|
||||||
value2term i (VPatt min max p) = return (EPatt min max p)
|
value2term i (VPatt min max p) = return (EPatt min max p)
|
||||||
value2term i (VPattType v) = do t <- value2term i v
|
value2term i (VPattType v) = do t <- value2term i v
|
||||||
return (EPattType t)
|
return (EPattType t)
|
||||||
|
|||||||
@@ -32,4 +32,5 @@ cc "x"++SOFT_SPACE++"y"
|
|||||||
cc "x"++CAPIT++"y"
|
cc "x"++CAPIT++"y"
|
||||||
cc "x"++ALL_CAPIT++"y"
|
cc "x"++ALL_CAPIT++"y"
|
||||||
cc "a"+"b"
|
cc "a"+"b"
|
||||||
|
cc <\x->x+"b" : Str -> Str>
|
||||||
cc eqInt (length ("a"+"b")) 2
|
cc eqInt (length ("a"+"b")) 2
|
||||||
|
|||||||
@@ -31,4 +31,5 @@ user error
|
|||||||
"x" ++ Predef.CAPIT ++ "y"
|
"x" ++ Predef.CAPIT ++ "y"
|
||||||
"x" ++ Predef.ALL_CAPIT ++ "y"
|
"x" ++ Predef.ALL_CAPIT ++ "y"
|
||||||
"ab"
|
"ab"
|
||||||
|
\v0 -> v0 + "b"
|
||||||
Predef.PTrue
|
Predef.PTrue
|
||||||
|
|||||||
Reference in New Issue
Block a user