From c437f63404dc0a4fdb42cd6eff661b071d3fca1d Mon Sep 17 00:00:00 2001 From: peb Date: Tue, 4 Apr 2006 09:33:22 +0000 Subject: adding support for 2nd order functions in SimpleGFC format --- src/GF/Conversion/Prolog.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/GF/Conversion/Prolog.hs') diff --git a/src/GF/Conversion/Prolog.hs b/src/GF/Conversion/Prolog.hs index ebad8e587..b930cb476 100644 --- a/src/GF/Conversion/Prolog.hs +++ b/src/GF/Conversion/Prolog.hs @@ -81,8 +81,8 @@ prtSRule lang (Rule (Abs cat cats (Name fun _prof)) (Cnc _ _ mterm)) = (if null lang then "" else prtQ lang ++ " : ") ++ prtFunctor "rule" [plfun, plcat, plcats, plcnc] ++ "." where plfun = prtQ fun - plcat = prtSCat cat - plcats = prtFunctor "c" (map prtSCat cats) + plcat = prtSDecl cat + plcats = prtFunctor "c" (map prtSDecl cats) plcnc = "\n\t" ++ prtSTerm (maybe Empty id mterm) prtSTerm (Arg n c p) = prtFunctor "arg" [prtQ c, prt (n+1), prtSPath p] @@ -101,9 +101,14 @@ prtSTerm (term :! sel) = prtOper "/" (prtSTerm term) (prtSTerm sel) prtSPath (Path path) = prtPList (map (either prtQ prtSTerm) path) -prtSCat (Decl var cat args) = prVar ++ prtFunctor (prtQ cat) (map prtSTTerm args) - where prVar | var == anyVar = "" - | otherwise = "_" ++ prtVar var ++ ":" +prtSDecl (Decl var typ) | var == anyVar = prtSAbsType typ + | otherwise = "_" ++ prtVar var ++ ":" ++ prtSAbsType typ + + +prtSAbsType ([] ::--> typ) = prtSFOType typ +prtSAbsType (args ::--> typ) = prtOper ":->" (prtPList (map prtSFOType args)) (prtSFOType typ) + +prtSFOType (cat ::@ args) = prtFunctor (prtQ cat) (map prtSTTerm args) prtSTTerm (con :@ args) = prtFunctor (prtQ con) (map prtSTTerm args) prtSTTerm (TVar var) = "_" ++ prtVar var -- cgit v1.2.3