Morphism.hs revision 5b2e9f4673599e1bc6e18a43ad615da28305b8e1
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa{- |
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaModule : $Header$
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaDescription : Symbol related functions for SoftFOL.
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaCopyright : (c) Klaus L�ttich, Uni Bremen 2007
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaMaintainer : luecke@informatik.uni-bremen.de
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaStability : provisional
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaPortability : portable
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksaFunctions for symbols of SoftFOL.
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa-}
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksamodule SoftFOL.Morphism (symOf, symbolToId) where
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksaimport SoftFOL.Sign
import Common.Id
import qualified Data.Set as Set
import qualified Data.Map as Map
symOf :: Sign -> Set.Set SFSymbol
symOf sig =
let opSymbs = Set.unions $ map toOpSymb $ Map.toList $ funcMap sig
predSymbs = Set.unions $ map toPredSymb $ Map.toList $ predMap sig
sortSymbs = Set.map toSortSymb $ Map.keysSet $ sortMap sig
in Set.unions [opSymbs,predSymbs,sortSymbs]
toOpSymb :: (SPIdentifier,Set.Set([SPIdentifier], SPIdentifier))
-> Set.Set SFSymbol
toOpSymb (ident,ts) = Set.map toSymb ts
where toSymb (args,res) =
SFSymbol { sym_ident = ident
, sym_type = SFOpType args res}
toPredSymb :: (SPIdentifier,Set.Set [SPIdentifier]) -> Set.Set SFSymbol
toPredSymb (ident,ts) = Set.map toSymb ts
where toSymb args =
SFSymbol { sym_ident = ident
, sym_type = SFPredType args}
toSortSymb :: SPIdentifier -> SFSymbol
toSortSymb ident = SFSymbol { sym_ident = ident
, sym_type = SFSortType}
symbolToId :: SFSymbol -> Id
symbolToId = mkId . (:[]) . sym_ident