------------------------------------------------------------------------- -- Expr child order ------------------------------------------------------------------------- %%[1 hs module (Expr.CoGam) %%] %%[1 hs export (module Gam, ChOrdGam, exprCoGam, coGamNmL) %%] %%[1 hs import (Data.List, qualified Data.Map as Map, Common, Expr.Expr, Gam) %%] %%[1 ag import ({Expr/AbsSynAG}) %%] %%[1 ag WRAPPER AGExprItf %%] %%[1 hs exprCoGam :: Expr -> ChOrdGam exprCoGam e = coGam_Syn_AGExprItf r2 where r1 = sem_AGExprItf (AGExprItf_AGItf e) r2 = wrap_AGExprItf r1 (Inh_AGExprItf) %%] ------------------------------------------------------------------------- -- Child order ------------------------------------------------------------------------- %%[1 hs type ChOrdGam = Gam Nm Int %%] ------------------------------------------------------------------------- -- Child order as list of names ------------------------------------------------------------------------- %%[1 hs coGamNmL :: ChOrdGam -> [Nm] coGamNmL coGam = [nmLhs] ++ l ++ [nmLhs] where l = map fst . sortBy (\(_,o1) (_,o2) -> compare o1 o2) . gamAssocsShadow $ coGam %%] ------------------------------------------------------------------------- -- Expr child order ------------------------------------------------------------------------- %%[1 ag ATTR AllExpr ANm AGExprItf [ | | coGam USE {`gamUnion`} {emptyGam}: ChOrdGam ] ATTR Expr ANm [ | | mbChNm: {Maybe Nm} ] SEM ANm | Fld lhs . mbChNm = Just @nm | * - Fld lhs . mbChNm = Nothing SEM Expr | * - AVar lhs . mbChNm = Nothing SEM Expr | ChildOrder lhs . coGam = case @expr.mbChNm of Just n -> gamSingleton n @seqNr Nothing -> emptyGam %%]