module MapAlgebra ( CoveragesOps (..) ) where import Coverage class (Coverages cov ) => CoveragesOps cov where -- operations single :: (b -> c) -> (cov a b ) -> (cov a c ) -- altera o contra-domaininio multiple :: (Eq a, Eq b) => ( [b] -> c ) -> [(cov a b )] -> (cov a b ) -> (cov a c ) -- altera o contra-dominio select :: (cov a b ) -> (a -> c -> Bool ) -> c -> (cov a b ) -- altera o dominio compose :: ( [b] -> b ) -> (cov a b ) -> b spatial :: ( [b] -> b ) -> (cov a b ) -> (a -> c -> Bool ) -> (cov c b ) -> (cov c b ) -- altera o contra-dominio -- axioms single g m = new_cov (domain m) (g . (fun m) ) multiple fn mlist mref = new_cov (domain mref) (\x -> fn (faux mlist x) ) compose fn m = (fn (values m)) spatial fn m p mref = new_cov (domain mref) (\i -> compose fn (select m p i) ) select m p o = new_cov sel_dom (fun m) -- a Fun�o de mapeamento se mantem where sel_dom = [ e | e <- (domain m) , (p e o)] -- g �o novo dominio com restri�o do predicado instance CoveragesOps Coverage where faux :: (Coverages cov, Eq a, Eq b) => [(cov a b )] -> a -> [b] faux [] _ = [] faux (x:xs) e = faux' (evaluate x e) where faux' (Just v ) = v : (faux xs e) faux' (Nothing) =(faux xs e)