1
0
forked from GitHub/gf-core

the embedded grammars now work with both the pure Haskell and the Haskell binding API

This commit is contained in:
Krasimir Angelov
2017-08-29 18:44:50 +02:00
parent 62e5852669
commit b7b7a7c91c
5 changed files with 13 additions and 5 deletions

View File

@@ -56,21 +56,20 @@ haskPreamble gadt name =
"import Data.Monoid"
] else []) ++
[
"import PGF hiding (Tree)",
"import qualified PGF",
"import PGF",
"----------------------------------------------------",
"-- automatic translation from GF to Haskell",
"----------------------------------------------------",
"",
"class Gf a where",
" gf :: a -> PGF.Tree",
" fg :: PGF.Tree -> a",
" gf :: a -> Expr",
" fg :: Expr -> a",
"",
predefInst gadt "GString" "String" "unStr" "mkStr",
"",
predefInst gadt "GInt" "Int" "unInt" "mkInt",
"",
predefInst gadt "GFloat" "Double" "unDouble" "mkDouble",
predefInst gadt "GFloat" "Double" "unFloat" "mkFloat",
"",
"----------------------------------------------------",
"-- below this line machine-generated",

View File

@@ -38,6 +38,7 @@ module PGF2 (-- * PGF
mkInt,unInt,
mkFloat,unFloat,
mkMeta,unMeta,
mkCId,
-- ** Types
Type, Hypo, BindType(..), startCat,
readType, showType,

View File

@@ -176,6 +176,9 @@ unMeta (Expr expr touch) =
touch
return (Just (fromIntegral (id :: CInt)))
-- | this functions is only for backward compatibility with the old Haskell runtime
mkCId x = x
-- | parses a 'String' as an expression
readExpr :: String -> Maybe Expr
readExpr str =

View File

@@ -51,6 +51,7 @@ module PGF(
mkStr, unStr,
mkInt, unInt,
mkDouble, unDouble,
mkFloat, unFloat,
mkMeta, unMeta,
-- extra
pExpr,

View File

@@ -6,6 +6,7 @@ module PGF.Expr(Tree, BindType(..), Expr(..), Literal(..), Patt(..), Equation(..
mkStr, unStr,
mkInt, unInt,
mkDouble, unDouble,
mkFloat, unFloat,
mkMeta, unMeta,
normalForm,
@@ -154,6 +155,9 @@ unDouble (ETyped e ty) = unDouble e
unDouble (EImplArg e) = unDouble e
unDouble _ = Nothing
mkFloat = mkDouble
unFloat = unDouble
-- | Constructs an expression which is meta variable
mkMeta :: Int -> Expr
mkMeta i = EMeta i