summaryrefslogtreecommitdiff
path: root/src/GF/Grammar
diff options
context:
space:
mode:
authoraarne <unknown>2004-03-24 15:09:06 +0000
committeraarne <unknown>2004-03-24 15:09:06 +0000
commitdc71ffcf5bae1f2b91467de273c71e7c3294acb3 (patch)
treea4e705bba717aa9f7421c000cfa5756d5eb8462b /src/GF/Grammar
parent31836c0da9ba7a716ee0480e6219d771da4999fa (diff)
Restoring old functionality
Diffstat (limited to 'src/GF/Grammar')
-rw-r--r--src/GF/Grammar/AppPredefined.hs26
-rw-r--r--src/GF/Grammar/Macros.hs6
2 files changed, 30 insertions, 2 deletions
diff --git a/src/GF/Grammar/AppPredefined.hs b/src/GF/Grammar/AppPredefined.hs
index 179272032..eceb749b0 100644
--- a/src/GF/Grammar/AppPredefined.hs
+++ b/src/GF/Grammar/AppPredefined.hs
@@ -3,12 +3,34 @@ module AppPredefined where
import Operations
import Grammar
import Ident
-import PrGrammar (prt)
+import Macros
+import PrGrammar (prt,prtBad)
---- import PGrammar (pTrm)
-- predefined function type signatures and definitions. AR 12/3/2003.
----- typPredefined :: Term -> Err Type
+isInPredefined :: Ident -> Bool
+isInPredefined = err (const True) (const False) . typPredefined
+
+typPredefined :: Ident -> Err Type
+typPredefined c@(IC f) = case f of
+ "Int" -> return typePType
+ "PBool" -> return typePType
+--- "PFalse" -> -- hidden
+--- "PTrue" ->
+ "dp" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
+ "drop" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
+ "eqInt" -> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "PBool")
+ "eqStr" -> return $ mkFunType [typeTok,typeTok] (cnPredef "PBool")
+ "length" -> return $ mkFunType [typeTok] (cnPredef "Int")
+ "occur" -> return $ mkFunType [typeTok,typeTok] (cnPredef "PBool")
+ "plus" -> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "PInt")
+---- "read" -> (P : Type) -> Tok -> P
+---- "show" -> (P : Type) -> P -> Tok
+ "take" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
+ "tk" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
+ _ -> prtBad "unknown in Predef:" c
+typPredefined c = prtBad "unknown in Predef:" c
appPredefined :: Term -> Term
appPredefined t = case t of
diff --git a/src/GF/Grammar/Macros.hs b/src/GF/Grammar/Macros.hs
index 291ea7521..cc43377cb 100644
--- a/src/GF/Grammar/Macros.hs
+++ b/src/GF/Grammar/Macros.hs
@@ -40,6 +40,12 @@ qq (m,c) = Q m c
typeForm = qTypeForm ---- no need to dist any more
+cPredef :: Ident
+cPredef = identC "Predef"
+
+cnPredef :: String -> Term
+cnPredef f = Q cPredef (identC f)
+
typeFormCnc :: Type -> Err (Context, Type)
typeFormCnc t = case t of
Prod x a b -> do