Amalgamate.hs revision e6d40133bc9f858308654afb1262b8b483ec5922
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann{- |
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannModule : $Header$
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannDescription : data types for amalgamability options and analysis
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannCopyright : (c) Christian Maeder, Uni Bremen 2004
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannMaintainer : till@tzi.de
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannStability : provisional
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannPortability : portable
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannData types for amalgamability options and analysis
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-}
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannmodule Common.Amalgamate where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport Data.List
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann{- | 'CASLAmalgOpt' describes the options for CASL amalgamability analysis
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann algorithms -}
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndata CASLAmalgOpt = Sharing -- ^ perform the sharing checks
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann | ColimitThinness -- ^ perform colimit thinness check (implies Sharing)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann | Cell -- ^ perform cell condition check (implies Sharing)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann | NoAnalysis -- ^ dummy option to indicate empty option string
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- | Amalgamability analysis might be undecidable, so we need
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- a special type for the result of ensures_amalgamability
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanndata Amalgamates = Amalgamates
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann | NoAmalgamation String -- ^ failure description
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann | DontKnow String -- ^ the reason for unknown status
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- | The default value for 'DontKnow' amalgamability result
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmanndefaultDontKnow :: Amalgamates
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmanndefaultDontKnow = DontKnow "Unable to assert that amalgamability is ensured"
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Show CASLAmalgOpt where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann show o = case o of
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Sharing -> "sharing"
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ColimitThinness -> "colimit-thinness"
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Cell -> "cell"
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann NoAnalysis -> "none"
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Read CASLAmalgOpt where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann readsPrec _ = readShow caslAmalgOpts
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- | test all possible values
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannreadShowAux :: [(String, a)] -> ReadS a
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannreadShowAux l s = case find ( \ (p, _) -> isPrefixOf p s) l of
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Nothing -> []
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Just (p, t) -> [(t, drop (length p) s)]
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- | input all possible values and read one as it is shown
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannreadShow :: Show a => [a] -> ReadS a
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannreadShow l = readShowAux $ map ( \ o -> (show o, o)) l
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- | possible CASL amalgamability options
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmanncaslAmalgOpts :: [CASLAmalgOpt]
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmanncaslAmalgOpts = [NoAnalysis, Sharing, Cell, ColimitThinness]
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann