mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-21 02:39:31 -06:00
def and List
This commit is contained in:
@@ -5,9 +5,9 @@
|
||||
-- Stability : (stable)
|
||||
-- Portability : (portable)
|
||||
--
|
||||
-- > CVS $Date: 2005/05/30 21:08:15 $
|
||||
-- > CVS $Date: 2005/10/02 20:50:19 $
|
||||
-- > CVS $Author: aarne $
|
||||
-- > CVS $Revision: 1.26 $
|
||||
-- > CVS $Revision: 1.27 $
|
||||
--
|
||||
-- based on the skeleton Haskell module generated by the BNF converter
|
||||
-----------------------------------------------------------------------------
|
||||
@@ -251,15 +251,20 @@ transCatDef x = case x of
|
||||
cont <- liftM concat $ mapM transDDecl ddecls
|
||||
return (i, G.AbsCat (yes cont) nope)
|
||||
listCat id ddecls size = do
|
||||
let li = mkListId id
|
||||
catd <- cat li ddecls
|
||||
let cd = M.mkDecl (G.Vr id)
|
||||
lc = G.Vr li
|
||||
niltyp = M.mkProdSimple (genericReplicate size cd) lc
|
||||
nilfund = (mkBaseId id, G.AbsFun (yes niltyp) nope)
|
||||
constyp = M.mkProdSimple [cd, M.mkDecl lc] lc
|
||||
consfund = (mkConsId id, G.AbsFun (yes constyp) nope)
|
||||
return [catd,nilfund,consfund]
|
||||
let
|
||||
li = mkListId id
|
||||
catd@(_,G.AbsCat (Yes cont0) _) <- cat li ddecls
|
||||
let
|
||||
cont = [(mkId x i,ty) | (i,(x,ty)) <- zip [0..] cont0]
|
||||
xs = map (G.Vr . fst) cont
|
||||
cd = M.mkDecl (M.mkApp (G.Vr id) xs)
|
||||
lc = M.mkApp (G.Vr li) xs
|
||||
niltyp = M.mkProdSimple (cont ++ genericReplicate size cd) lc
|
||||
nilfund = (mkBaseId id, G.AbsFun (yes niltyp) nope)
|
||||
constyp = M.mkProdSimple (cont ++ [cd, M.mkDecl lc]) lc
|
||||
consfund = (mkConsId id, G.AbsFun (yes constyp) nope)
|
||||
return [catd,nilfund,consfund]
|
||||
mkId x i = if isWildIdent x then (mkIdent "x" i) else x
|
||||
|
||||
transFunDef :: FunDef -> Err ([Ident], G.Type)
|
||||
transFunDef x = case x of
|
||||
|
||||
Reference in New Issue
Block a user