clafer-0.4.4: Compiles Clafer models to other formats: Alloy, JavaScript, JSON, HTML, Dot.

Safe HaskellNone
LanguageHaskell2010

Language.Clafer.Common

Synopsis

Documentation

getSuper :: IClafer -> [String] Source #

Returns only [] or [_]

getReference :: IClafer -> [String] Source #

Returns a list of any length

getSuperAndReference :: IClafer -> [String] Source #

Returns a list of any length

findHierarchy :: (IClafer -> [String]) -> UIDIClaferMap -> IClafer -> [IClafer] Source #

Finds all super clafers according to sFun

mapHierarchy :: (IClafer -> b) -> (IClafer -> [String]) -> UIDIClaferMap -> IClafer -> [b] Source #

Finds hierarchy and transforms each element

findUIDinSupers :: UIDIClaferMap -> UID -> IClafer -> Maybe IClafer Source #

traverse the inheritance hierarchy upwards to find a clafer with the given uidToFind

findUIDinParents :: UIDIClaferMap -> UID -> IClafer -> Maybe IClafer Source #

traverse the containment hierarchy upwards to find a clafer with the given uidToFind

data NestedInheritanceMatch Source #

Constructors

NestedInheritanceMatch 

Fields

isProperNesting :: UIDIClaferMap -> Maybe NestedInheritanceMatch -> Bool Source #

assumes that isProperNesting m == True

This represents a match of this shape

superClafersParent / <> ?1| * parentsSuperClafer / [=] superClafer --*-> superClafersTarget *| parentClafer | |?2 <> *| [=] targetsSuperClafer * | / | *| headClafer -----*-----> targetClafer

The clafers are obtained by navigating from the headClafer by following the links marked by * The link marked by ?1 is checked for correctness of nesting (isProperNesting): - _uid parentsSuperClafer == _parentUID superClafer - top-level abstract clafers which extend nested abstract clafers are made into siblings of their supers (see https://github.com/gsdlab/clafer/issues/67) The link marked by ?2 is checked for correctness of redefinition (isProperRefinement): - proper subtyping, bag to set, proper cardinality restriction Redefinition occurs when the name of headClafer is the same as the name of superClafer (isProperRedefinition): - isProperNesting && isProperRefinement && (_ident headClafer) == (_ident superClafer)

isProperRefinement :: UIDIClaferMap -> Maybe NestedInheritanceMatch -> (Bool, Bool, Bool) Source #

assumes that isProperNesting m == True and isProperRefinement m == (True, True, True)

isRedefinition Source #

Arguments

:: Maybe NestedInheritanceMatch 
-> Bool

whether the name of headClafer is the same as superClafer

try to match the nested inheritance pattern ^ only available after the parentUIDs were computed

apply :: forall t t1. (t -> t1) -> t -> (t, t1) Source #

bfs :: forall b b1. (b1 -> (b, [b1])) -> [b1] -> [b] Source #

lurry :: forall t t1. ([t1] -> t) -> t1 -> t1 -> t Source #

fst3 :: forall t t1 t2. (t, t1, t2) -> t Source #

snd3 :: forall t t1 t2. (t, t1, t2) -> t1 Source #

trd3 :: forall t t1 t2. (t, t1, t2) -> t2 Source #

toTriple :: forall t t1 t2. t -> (t1, t2) -> (t, t1, t2) Source #

toMTriple :: forall t t1 t2. t -> (t1, t2) -> Maybe (t, t1, t2) Source #

keywordIdents :: [String] Source #

reserved keywords which cannot be used as clafer identifiers

data GEnv Source #

Instances

Eq GEnv Source # 

Methods

(==) :: GEnv -> GEnv -> Bool #

(/=) :: GEnv -> GEnv -> Bool #

Show GEnv Source # 

Methods

showsPrec :: Int -> GEnv -> ShowS #

show :: GEnv -> String #

showList :: [GEnv] -> ShowS #

safeTail :: [a] -> [a] Source #