packages feed

ruler-0.4.0.0: src/Utils.chs

-- $Id: EHTyFitsIn.chs 214 2005-05-28 17:52:29Z atze $

%%[1 hs module (Utils)
%%]

%%[1 hs export (jdGamFmExpr, rlLtxGamTranspose, gamTranspose, sc2DATA, rl2SEM)
%%]

%%[1 hs import (qualified Data.Map as Map, Common, Expr.Expr, FmGam, JdShpGam, Admin)
%%]

%%[1 hs

-------------------------------------------------------------------------
-- Misc
-------------------------------------------------------------------------

jdGamFmExpr :: FmKind -> JdShpGam Expr -> Expr
jdGamFmExpr k = fkGamLookup exprUnk jdshExpr [k,FmSpec]

-------------------------------------------------------------------------
-- Transpose gam of gam
-------------------------------------------------------------------------

gamTranspose
  :: Ord k =>
     (i -> Gam k v,k -> k -> i -> v -> i')
       -> Gam k i -> Gam k (Gam k i')
gamTranspose (getG,mkI) g
  = gamFromAssocsWith gamUnion [ (k2,gamSingleton k1 (mkI k1 k2 v1 v2)) | (k1,v1) <- gamAssocsShadow g, (k2,v2) <- gamAssocsShadow (getG v1) ]

rlLtxGamTranspose :: Ord k => Gam k (Gam k (n,v)) -> Gam k (Gam k (n,v))
rlLtxGamTranspose g
  = gamFromAssocsWith gamUnion [ (v,gamSingleton r (n,d)) | (r,vm) <- gamAssocsShadow g, (v,(n,d)) <- gamAssocsShadow vm ]

-------------------------------------------------------------------------
-- RulerAdmin: AG name info
-------------------------------------------------------------------------

sc2DATA :: ScInfo e -> DtInvGam -> Nm
sc2DATA si dg
  = case scMbAGStr si of
      Just s  -> Nm s
      Nothing -> case gamLookup (scNm si) dg of
                   Just i  -> dtiAGNm i
                   Nothing -> scNm si

rl2SEM :: RlInfo e -> DtInvGam -> Nm -> Nm -> Nm -> Nm
rl2SEM rlInfo dg scNm rlNm vwNm
  = case rlMbAGStr rlInfo of
      Just s  -> Nm s
      Nothing -> case dtVwRlInvGamLookup scNm vwNm rlNm dg of
                   Just (_,_,i) -> daiAGNm i
                   Nothing      -> rlNm

%%]