2W 4      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                              !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !!!!!!!!!!!! ! ! ! ! !!!!!!!!!!!!""""""" "!#"###$#%#&#'#(#)#*#+#,#-#.#/#0#1#2#3#$SafeGiven a sequence of arguments, join them together in a manner that could be used on | the command line, giving preference to the Windows cmd shell quoting conventions. | For an alternative version, intended for actual running the result in a shell, see "System.Process.showCommandForUser"CGiven a string, split into the available arguments. The inverse of .45674567$None888Safe 9:;<=> 9:;<=>None<GBEncode a Haskell String to a list of Word8 values, in UTF8 format.R  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZQ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYR23456TUVWX78"#$%&'()*+,-./01 !9:;<=>?@ABCDEFGHIJKLMNOPQRS Z Y3   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZSafe+0[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     [\]^_`abcdefghijklmnopqrstuvwxyz{|}~     ijklmnopqrstuvwxyz{|}~ghabcdef_`]^[\J[\]^_`abcdefghi,jklmnopqrstuvwxyz{|}~     Safe2 !"#$%&'()*+,-./0123456789:;<=>?@ABC 2CBA@?>=<;:9876543210/.-,+*)('&%$#"! 0 !"#$%&'()*+,-./0123456789:;<=>?@ABCNone+BF quantifierGdoes not existH less than oneI exactly oneJat least one (i.e., exists)Kfor allLFor IFunExp standard set of operators includes: 1. Unary operators: ! - not (logical) # - set counting operator - - negation (arithmetic) max - maximum (created for goals and maximum of a set) min - minimum (created for goals and minimum of a set) 2. Binary operators: <=> - equivalence => - implication || - disjunction xor - exclusive or && - conjunction < - less than > - greater than = - equality <= - less than or equal >= - greater than or equal != - inequality in - belonging to a set/being a subset nin - not belonging to a set/not being a subset + - addition/string concatenation - - substraction * - multiplication / - division ++ - set union -- - set difference ** - set intersection <: - domain restriction :> - range restriction . - relational join 3. Ternary operators ifthenelse -- if then else3Local declaration disj x1; x2 : X ++ Y y1 : YN is disjunctOa list of local namesP!set to which local names refer toRVquantified expression with declarations e.g., [ all x1; x2 : X | x1.ref != x2.ref ]V{expression with a unary function, e.g., -1 binary function, e.g., 2 + 3 ternary function, e.g., if x then 4 else 5Yinteger number[ real number]&double-precision floating point number_stringaa reference to a clafer namebImodule name - currently not used and empty since we have no module systemc$name of the clafer being referred tod+identifier refers to a top-level definitione)the UID of the bound IClafer, if resolvedf&Embedes reference to a resolved Claferg]This is expression container (parent). It has meta information about an actual expression ?ithe inferred typej<non-empty unique id for expressions with span, "" for noSpank!position in the input Clafer filelthe actual expressionm)(Min, Max) integer interval. -1 denotes *nGroup cardinality is specified as an interval. It may also be given by a keyword. xor 1..1 isKeyword = True 1..1 1..1 isKeyword = Falsep&whether given by keyword: or, xor, muxrRA type of reference. -> values unique (set) ->> values non-unique (bag)twhether set or baguNthe only allowed reference expressions are IClafer and set expr. (++, **, --s)vClafer's subelement is either a clafer, a constraint, or a goal (objective) This is a wrapper type needed to have polymorphic lists of elementsxthe actual claferz$whether hard constraint or assertion{&the container of the actual expression|Goal (optimization objective)}whether maximize or minimize~uClafer has a list of fields that specify its properties. Some fields, marked as (o) are for generating optimized code)the position of the syntax in source code(whether abstract or not (i.e., concrete)group cardinalityname declared in the modela unique identifier\"root" if top-level, "" if unresolved or for root clafer, otherwise UID of the parent claferNsuperclafer - only allowed PExp is IClaferId. Nothing = default super "clafer"reference type, bag or setclafer cardinality(o) global cardinalitynested elementsGeach file contains exactly one mode. A module is a list of declarations.always empty (no syntax for declaring modules)List of top-level elements UIDHrepresents an inheritance hierarchy obtained using @Common.findHierarchymust only be a TClassmust only be a TClass IType*is a list of basic types (not union types)A "supertype" of all IR typesfile:/ ftp: or http:/ prefixed URL+clafer name as declared in the source modelunique identifier of a clafer map over IRfoldMap over IR fold the IRPDatatype used for JSON output. See Language.Clafer.gatherObjectivesAndAttributesDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~vwy|xz{}{rstunopqmghijklfQRVY[]_aSTUWXZ\^`bcdeLMNOPFGHIJKEDaDEFGHIJKLMNOPQRVY[]_aSTUWXZ\^`bcdefghijklmnopqrstuvwy|xz{}{~   None4   None4>IN]Convert all strings into ints for analysis | Return an inverse map from ints back to strings                    None=maps between fully-, least-partially-qualified names and UIDs:partially-qualified name, must not begin with :: | e.g., `Person::name`, chair2fully-qualified name, must begin with :: | e.g., `::Person::name`, `::Company::Department::chair`$a fully- or partially-qualified namemget the UID of a clafer given a fully qualifed name or potentially many UIDs given a partially qualified name6get the fully-qualified name of a clafer given its UID@get the least-partially-qualified name of a clafer given its UID?derive maps between fully-, partially-qualified names, and UIDs@ABCDEFGHIJKLM  @ABCDEFGHIJKLM NoneGenerate a JSON list of triples containing a fully-qualified-, least-partially-qualified name, and unique id. | Both the FQNames and UIDs are brittle. LPQNames are the least brittle.VGenerate a JSON list of tuples containing a least-partially-qualified name and a scopeDgiven the QNameMaps, parse the JSON scopes and return list of scopesWrite a .cfr-scope fileRead a .cfr-scope fileNOPNOP None4 !"#$%&'()*+,-./0123456QRSTUVWXYZ[\]^_`abcdefgh7 !"#$%&'()*+,-./0123456756 !"#$%&'()*+,-./012347 !"#$%&'()*+,-./0123456QRSTUVWXYZ[\]^_`abcdefgh7 None89898989 None+4>INC*the clafer for which the match is computedDparent of the head claferE&parent of the super of the head claferFtargets of the head claferG&super of the target of the head claferH9super of the head clafer (must exist, otherwise no match)I&parent of the super of the head claferJ'targets of the super of the head claferPReturns only [] or [_]QReturns a list of any lengthRReturns a list of any lengthc)Finds all super clafers according to sFund+Finds hierarchy and transforms each elementeTtraverse the inheritance hierarchy upwards to find a clafer with the given uidToFindfTtraverse the containment hierarchy upwards to find a clafer with the given uidToFindg&assumes that isProperNesting m == True%This represents a match of this shapesuperClafersParent / <> ?1| * parentsSuperClafer / [=] superClafer --*-> superClafersTarget *|   parentClafer | |?2 <> *| [=] targetsSuperClafer * | / | *| headClafer -----*-----> targetClaferSThe 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)hUassumes that isProperNesting m == True and isProperRefinement m == (True, True, True)i`try to match the nested inheritance pattern ^ only available after the parentUIDs were computed<reserved keywords which cannot be used as clafer identifiers|:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi9whether the name of headClafer is the same as superClaferjklmnopqrstuvwxyz{|}~|:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~|LMNOPQRSTUVWXYZ[\]^_K`abcdefABCDEFGHIJghijklmnopqrstuvwxyz{|}~:;<=>?@m:;<=>?@A BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NoneChoco 3 code generationNone?representation of strings in chunks (for line/column numbering)  NoneIN;Transform the AST into the intermediate representation (IR)>desugars enumeration to abstract and global singleton features8888None            None  Sing ObjMGet TClafer for a given Clafer can only be called after inheritance resolverXGet TClafer for a given Clafer by its UID can only be called after inheritance resolverXGet TClafer for a given Clafer by its UID can only be called after inheritance resolverxGet TMap for a given reference Clafer. Nothing for non-reference clafers. can only be called after inheritance resolveryGet TMap for a given Clafer by its UID. Nothing for non-reference clafers. can only be called after inheritance resolver9Union the two given types >>> TString +++ TString TStringWUnions with only one type should be collapsed. >>> TUnion [TString] +++ TString TStringTString +++ TInteger!TUnion {_un = [TString,TInteger]}TString +++ TUnion [TInteger]!TUnion {_un = [TString,TInteger]}TUnion [TString] +++ TInteger!TUnion {_un = [TString,TInteger]}%TUnion [TString] +++ TUnion[TInteger]!TUnion {_un = [TString,TInteger]}>TUnion [TString] +++ TUnion[TInteger] +++ TInteger +++ TString!TUnion {_un = [TString,TInteger]}-Should return TUnion {_un = [TClafer {_hi = [Alice,Student,Person]},TClafer {_hi = [Bob,Employee,Person5]}]} >>> tClaferAlice +++ tClaferBob TClafer {_hi = [Alice,Student,Person,Bob,Employee]}tClaferAlice +++ tClaferAlice,TClafer {_hi = ["Alice","Student","Person"]}_Intersection of two types. >>> runListT $ intersection undefined TString TString [Just TString]2runListT $ intersection undefined TInteger TString [Nothing]0runListT $ intersection undefined TInteger TReal [Just TReal]6runListT $ intersection undefined tDrefMapDOB TInteger[Just TInteger]lCannot assign a TReal to a map to TInteger >>> runListT $ intersection undefined tDrefMapDOB TReal [Nothing]lCannot assign a TReal to a map to TInteger >>> runListT $ intersection undefined TReal tDrefMapDOB [Nothing]This function is similar to , but takes into account more ancestors to be able to combine clafers of different types, but with a common ancestor: Inputs: t1 is of type B t2 is of type C B : A C : A Outputs: the resulting type is: A, and the type combination is validvCompute the type of sequential composition of two types >>> runListT $ composition undefined TString TString [Nothing]1runListT $ composition undefined TInteger TString [Nothing]/runListT $ composition undefined TInteger TReal [Nothing]5runListT $ composition undefined tDrefMapDOB TInteger=[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TInteger})]Cannot assign a TReal to a map to TInteger, should return [Nothing] >>> runListT $ composition undefined tDrefMapDOB TReal [Just (TMap {_so = TClafer {_hi = [DOB]}, _ta = TReal})]qCannot assign a TInteger to a map to TInteger >>> runListT $ composition undefined TInteger tDrefMapDOB [Nothing]kCannot assign a TReal to a map to TInteger >>> runListT $ composition undefined TReal tDrefMapDOB [Nothing]ArunListT $ composition undefined tDrefMapDOB (TMap TReal TString)<[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TString})]The following should return [Nothing] >>> runListT $ composition undefined (TMap TString TReal) (TMap TInteger TString) [Just (TMap {_so = TString, _ta = TString})]%9Return the type if it's possible to coerce the right type$coerceRight TString TInteger NothingcoerceRight TInteger TInteger Just TIntegercoerceRight TDouble TInteger Just TDoublecoerceRight TReal TDouble Just TRealcoerceRight TInteger TDoubleNothingcoerceRight TDouble TRealNothing   !"#$%   !"#$%   !"#$%   !"#$%None&eCollects the global cardinality and hierarchy information into proper, not necessarily lower, bounds. &ijklmnopqr&& &ijklmnopqrSafe s'(t)u*v+wxyz'()*+'()*+ s'(t)u*v+wxyzSafe,-./0123,-.,-.3210/,-./0123None *+-./0345679:;<>@CDEHIKLN456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;<:=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~896745456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6 7 None+Scope inference strategy8Type of output to be generated at the end of compilation+      !")      +"!            !"None4IN#Alloy code generationG{|}~###@{|}~#None$9Return an appropriate scope analysis for a given strategy$$$$NoneIN'uThe full ErrPos requires lots of information that needs to be consistent. Every time we throw an error, | we need BOTH the (fragId, fragPos) AND modelPos. This makes it easier for developers using ClaferT so they | only need to provide part of the information and the rest is automatically calculated. The code using | ClaferT is more concise and less error-prone. | | modelPos <- modelPosFromFragPos fragdId fragPos | throwErr $ ParserErr (ErrPos fragId fragPos modelPos) | | vs | | throwErr $ ParseErr (ErrFragPos fragId fragPos) | | Hopefully making the error handling easier will make it more universal.(Position relative to the start of the fragment. Will calculate model position automatically. | fragId starts at 0 | The position is relative to the start of the fragment.-Position relative to the start of the complete model. Will calculate fragId and fragPos automatically. | The position is relative to the entire complete model.3&The fragment where the error occurred.4Error positions are relative to their fragments. | For example an error at (Pos 2 3) means line 2 column 3 of the fragment, not the entire model.5)The error position relative to the model.6&Clafer keeps track of multiple errors.9]Possible errors that can occur when using Clafer | Generate errors using throwErr/throwErrs:: Generic error<Error generated by the parser=Position of the error>$Error generated by semantic analysisC#Monad Transformer for using Clafer.DMonad for using Clafer.NThis simulates a field in the ClaferEnv that will always recompute the map, since the IR always changes and the map becomes obsoleteOThis simulates a field in the ClaferEnv that will always recompute the map, since the IR always changes and the map becomes obsolete maps from a UID to an IClafer with the given UIDSThrow many errors.TThrow one error.U Catch errorsVGet the ClaferEnvXModify the ClaferEnvY>Set the ClaferEnv. Remember to set the env after every change.ZUses the ErrorT convention: | Left is for error (a string containing the error message) | Right is for success (with the result)[ Convenience@%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[;%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[?EFGHIJKLMNORPQDC9:<>;=;=;678BA@?12345'(+-/)*),.0STUVWXY[Z%&"%&' (+-/)*),.0123456789:<>;=;=;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[None4 \ ident level stack, last new lineb5ident level of new line, current level or parenthesistAdd to the global and column positions of a token. | The column position is only changed if the token is on | the same line as the given position.vGet the position of a token.wGet the line number of a token.x!Get the column number of a token.y-Check if a token is one of the given symbols.z*Check if a token is the layout open token.|+Check if a token is the layout close token.~*Get the number of characters in the token.@Insert a new symbol token at the begninning of a list of tokens.4\]^_`abcdefghijklmnopqrstQIf the token is on the same line as this position, update the column position.,Number of characters to add to the position.uvwxyz{|}~Position of the new token.Symbol in the new token.bThe rest of the tokens. These will have their positions updated to make room for the new token.4\]^_`abcdefghijklmnopqrstuvwxyz{|}~4cdefghiba^_`\]jklmnopqrstuvwxyz{|}~+\]^_`abcdefghijklmnopqrstuvwxyz{|}~None#Generate the model as HTML documentTGenerate the model as plain text | This is used by the graph generator for tooltips056650None+Generate a graph in the simplified notation8Generate a graph in CVL variability abstraction notation+     5665+     None4JApply optimizations for unused abstract clafers and inheritance flatteningNone4 How a given name was resolved0"this", "parent", "dref", "root", and "children"#primitive type: "integer", "string"local variable (in constraints)clafer's descendantresolved by a referenceclafer's ancestorabstract clafernon-abstract top-level clafer+this environment is created for each claferHDepending on how resolved construct a navigation path from 'context env'???-  None345C"Phase one: only process references-Phase two: only process constraints and goalsType inference and checking- !"#$%&'()*+,-./0123456789:;<=>?@AB !"#$%&'()*+,-./0123456789:;<=>?@AB!None4#Resolve Non-overlapping inheritanceResolve overlapping inheritance+Resolve inherited and default cardinalities Expand inheritance                    "None4Run the various resolvers Name resolver    #None!%Result of generation for a given mode#output file extension$ output text%%the final environment of the compiler&<Maps source constraint spans in Alloy to the spans in the IR',Map back from Ints used to represent Strings(#scopes generated by scope inference-Run the Clafer compiler. mURL = Nothing means compile the top-level module mURL = Just url means compile an imported module from the given url.DAdd a new fragment to the model. Fragments should be added in order.CIConverts the Err monads (created by the BNFC parser generator) to ClaferTDConverts one Err. liftParseErrs is better if you want to report multiple errors. | This method will only report one before ceasing execution./WParses the model into AST. Adding more fragments beyond this point will have no effect.1Compiles the AST into IR.2PSplits the AST into their fragments, and generates the output for each fragment.3#Generates outputs for the given IR.$!"#$%&'()*+,-EFGHIJK.CD/012LM3NOPQRS]:,-.      BEFGHIJKLMPQRVYZ[!"#$%&'()*+,-./01237-.1/032Z[BVY!"*#$%&'()+,:EFGHIJKLMQPR! "*#$%&'()+,-EFGHIJK.CD/012LM3NOPQRST%&'()*+,-./.01213456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]]^_`abcdefghijklmnopqrstuvwwxyz{|}}~                ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C C D E F G H I I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                    !"#$%&'()*+,-./0D123456789::;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01123456789:;<=>?69@ABBCDEFGHIJKLMNOPQRSTUVWXXYZY[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~f !!!!!!!!!!!!!!!!!!!!!!!! ! ! ! ! """"""""############ #!#"###$#%#&#'()*$+,-./0123  4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [\]^_`abcde fghijklmmnoppqKrAstuvwxyz{|}~                                      ! " # $ % & '#(#)#*#+#,#-#.#/#0#1#2##3#4#5#6#78clafe_BLsf2uHIyhjANnAcZ8n6RILanguage.Clafer.SplitJoin Paths_claferLanguage.Clafer.Front.LexClaferLanguage.Clafer.Front.AbsClafer!Language.Clafer.Front.PrintClafer&Language.Clafer.Intermediate.IntclaferLanguage.Clafer.Generator.Stats+Language.Clafer.Intermediate.StringAnalyzerLanguage.Clafer.QNameUIDLanguage.Clafer.JSONMetaData$Language.Clafer.Intermediate.TracingLanguage.Clafer.CssLanguage.Clafer.CommonLanguage.Clafer.Generator.Choco Language.Clafer.Generator.Concat&Language.Clafer.Intermediate.Desugarer(Language.Clafer.Intermediate.Transformer'Language.Clafer.Intermediate.TypeSystem0Language.Clafer.Intermediate.SimpleScopeAnalyzerLanguage.Clafer.CommentsLanguage.Clafer.Front.ErrMLanguage.Clafer.Front.ParClaferLanguage.Clafer.ClaferArgsLanguage.Clafer.Generator.Alloy*Language.Clafer.Intermediate.ScopeAnalysisLanguage.ClaferT$Language.Clafer.Front.LayoutResolverLanguage.Clafer.Generator.HtmlLanguage.Clafer.Generator.Graph#Language.Clafer.Optimizer.Optimizer)Language.Clafer.Intermediate.ResolverName)Language.Clafer.Intermediate.ResolverType0Language.Clafer.Intermediate.ResolverInheritance%Language.Clafer.Intermediate.ResolverLanguage.ClaferGetURLjoinArgs splitArgsversion getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameAlexAcc AlexAccNone AlexAccSkip AlexLastAccAlexNone AlexLastSkip AlexReturnAlexEOF AlexErrorAlexSkip AlexTokenAlexAddrAlexA# AlexInputBytePosnPnBTreeNBTokenPTErrTokTSTLTITVTDTC T_PosInteger T_PosDouble T_PosReal T_PosString T_PosIdentT_PosLineCommentT_PosBlockComment T_PosAlloy T_PosChoco alex_base alex_table alex_check alex_deflt alex_accepttoksharetokenPos tokenPosn tokenLineCol posLineCol mkPosTokenprTokeneitherResIdentresWordsunescapeInitTail alexStartPosalexMovetokens alexGetBytealexInputPrevChar utf8Encode alex_action_1 alex_action_2 alex_action_3 alex_action_4 alex_action_5 alex_action_6 alex_action_7 alex_action_8 alex_action_9alex_action_10alex_action_11alexIndexInt16OffAddralexIndexInt32OffAddr quickIndexalexScan alexScanUser alex_scan_tkniUnbox$fFunctorAlexLastAccLocId LocIdIdentModId ModIdIdentEnumId EnumIdIdentQuantQuantNoQuantNot QuantLoneQuantOne QuantSomeDeclExp EDeclAllDisjEDeclAllEDeclQuantDisj EDeclQuant EImpliesElseEIffEImpliesEOrEXorEAndENegELtEGtEEqELteEGteENeqEInENin EQuantExpEAddESubEMulEDivERemEGMaxEGMinESumEProdECardEMinExpEDomainERangeEUnion EUnionCom EDifference EIntersectionEIntersectionDeprecatedEJoinClaferIdEIntEDoubleERealEStrNamePath ExInteger ExIntegerAst ExIntegerNumNCardCard CardEmptyCardLoneCardSomeCardAnyCardNum CardIntervalGCard GCardEmptyGCardXorGCardOrGCardMuxGCardOpt GCardIntervalInitHow InitConstant InitDefaultInit InitEmptyInitSome ReferenceReferenceEmpty ReferenceSet ReferenceBagSuper SuperEmpty SuperSomeElement Subclafer ClaferUse SubconstraintSubgoal SubAssertionElements ElementsEmpty ElementsListAbstract AbstractEmptyGoalGoalMinDeprecatedGoalMaxDeprecated GoalMinimize GoalMaximize Assertion ConstraintClafer DeclarationEnumDecl ElementDeclModulePosChocoPosAlloyPosBlockCommentPosLineCommentPosIdent PosStringPosReal PosDouble PosInteger SpannablegetSpanSpanPosnoPosnoSpan>-len$fSpannableLocId$fSpannableModId$fSpannableEnumId$fSpannableQuant$fSpannableDecl$fSpannableExp$fSpannableName$fSpannableExInteger$fSpannableNCard$fSpannableCard$fSpannableGCard$fSpannableInitHow$fSpannableInit$fSpannableReference$fSpannableSuper$fSpannableElement$fSpannableElements$fSpannableAbstract$fSpannableGoal$fSpannableAssertion$fSpannableConstraint$fSpannableClafer$fSpannableDeclaration$fSpannableModule$fSpannablePosChoco$fSpannablePosAlloy$fSpannablePosBlockComment$fSpannablePosLineComment$fSpannablePosIdent$fSpannablePosString$fSpannablePosReal$fSpannablePosDouble$fSpannablePosInteger $fSpannable[]PrintprtprtListDoc printTreedocrenderparenthconcatSconcatD replicateSmkEscprPrec $fPrintLocId $fPrintModId $fPrintEnumId $fPrintQuant $fPrintDecl $fPrintExp $fPrintName$fPrintExInteger $fPrintNCard $fPrintCard $fPrintGCard$fPrintInitHow $fPrintInit$fPrintReference $fPrintSuper$fPrintElement$fPrintElements$fPrintAbstract $fPrintGoal$fPrintAssertion$fPrintConstraint $fPrintClafer$fPrintDeclaration $fPrintModule$fPrintPosChoco$fPrintPosAlloy$fPrintPosBlockComment$fPrintPosLineComment$fPrintPosIdent$fPrintPosString$fPrintPosReal$fPrintPosDouble$fPrintPosInteger $fPrintDouble$fPrintInteger $fPrintChar $fPrint[]ColNoLineNoIQuantINoILoneIOneISomeIAllIDecl_isDisj_decls_bodyIExp IDeclPExp_quant_oDecls_bpexpIFunExp_op_expsIInt_iintIReal_irealIDouble_idoubleIStr_istr IClaferId_modName_sident_isTop_binding ClaferBindingPExp_iType_pid_inPos_expIntervalIGCard _isKeyword _interval IReference_isSet_refIElementIEClafer_iClafer IEConstraint_isHard_cpexpIEGoal _isMaximizeIClafer_cinPos _isAbstract_gcard_ident_uid _parentUID_super _reference_card_glCard _elementsIModule_mName_mDeclsITypeTBooleanTStringTIntegerTDoubleTRealTClafer_hiTMap_so_taTUnion_unIr IRIModule IRIElementIRITypeIRClaferIRIExpIRPExp IRIReferenceIRIQuantIRIDeclIRIGCardURLCNameUIDmapIR foldMapIRfoldIRiMapiFoldMapiFold unWrapIModuleunWrapIElement unWrapIType unWrapIClafer unWrapIExp unWrapPExpunWrapIReference unWrapIQuant unWrapIDecl unWrapIGCard $fPlatedIExp $fPlatedPExp$fPlatedIClafer$fPlatedIModulehisotaunmDeclsmNamecardcinPoselementsgcardglCardident isAbstract parentUID referencesuperuidcpexpiClaferisHard isMaximizeisSetrefinterval isKeywordexpiTypeinPospidbindingbpexpexpsidoubleiintirealisTopistrmodNameoDeclsopquantsidentbodydeclsisDisj $fToJSONIType$fToJSONIModule$fToJSONIClafer$fToJSONIElement$fToJSONIReference$fToJSONIGCard $fToJSONPExp $fToJSONIExp $fToJSONIDeclObjectivesAndAttributes _qualities _attributes $fToJSONPos $fToJSONSpan$fToJSONIQuant$fToJSONObjectivesAndAttributesStats naClafers nrClafers ncClafers nConstraintsnGoalssglCard statsModule statsClafer statsCard statsElement astrModule astrClafer astrReference astrElementastrPExpastrIExp QNameMapsPQNameFQNameQNamegetUIDs getFQName getLPQNamederiveQNameMapsgetQNameUIDTriplesgenerateJSONnameUIDMapgenerateJSONScopesparseJSONScopeswriteCfrScopeFilereadCfrScopeFileAst AstModuleAstDeclaration AstClafer AstConstraint AstAssertionAstGoal AstAbstract AstElements AstElementAstSuper AstReferenceAstInit AstInitHowAstGCardAstCardAstNCard AstExIntegerAstNameAstExpAstDeclAstQuant AstEnumIdAstModIdAstLocId traceIrModuletraceAstModule printAstNodeheadercssGEnv identCountMapexpCountstablesClafers uidClaferMapNestedInheritanceMatch _headClafer _parentClafer_parentsSuperClafer _targetClafer_targetsSuperClafer _superClafer_superClafersParent_superClafersTarget UIDIClaferMapResult transIdentmkIdent mkIntegergetSuper getReferencegetSuperAndReference getSuperId getRefIds isEqClaferId mkPLClaferId pExpDefPidpExpDefisParent isClaferName isClaferName' getClaferName isTopLevel elemToClafer toClaferscreateUidIClaferMap findIClaferisTopLevelByUID findHierarchy mapHierarchyfindUIDinSupersfindUIDinParentsisProperNestingisProperRefinementisRedefinitionmatchNestedInheritanceapplybfs toNodeShallow getSubclafers bfsClaferslurryfst3snd3trd3toTriple toMTripleiNotiCSetiMiniMaximumiMinimum iMaximize iMinimizeiSumSetiProdSetunOpsiIffiImpliOriXoriAnd logBinOpsiLtiGtiEqiLteiGteiNeqiIniNin relGenBinOps relSetBinOps relBinOpsiPlusiSubiMuliDiviRem arithBinOpsiUnion iDifference iIntersectioniDomainiRangeiJoin setBinOpsbinOps iIfThenElse mkIFunExptoLowerS rootIdentrootUID thisIdent parentIdent drefIdent childrenIdent specialNames isSpecial stringTypeintType integerTyperealType doubleType booleanType baseClafermodSepprimitiveTypes isPrimitive keywordIdentssafeTail genCModuleIrTraceIrPExppUid LowerCardisGroup UpperCard ExactCardNoTracePositionConcatCStringsrcPosnodesmkConcat mapToCStr iscPrimitiveflatten+++cconcat cintercalate filterNullisNullcunlines desugarModule sugarModule desugarEnumsdesugarDeclarationsugarDeclaration desugarClafergetPExpClaferIdent sugarClafer desugarSuperdesugarReference desugarInitdesugarInitHow desugarName desugarModId sugarModId sugarSupersugarReference sugarInitHowdesugarConstraintdesugarAssertion desugarGoalmkMinimizeMaximizePExpsugarConstraintsugarAssertion sugarGoaldesugarAbstract sugarAbstractdesugarElements sugarElementsdesugarElement sugarElement desugarGCard isOptionalDefisExIntegerAst sugarGCard desugarCard desugarNCarddesugarExInteger sugarCardsugarExInteger desugarExp desugarExp' desugarOpsugarExp sugarExp' desugarPathisSetExp reducePExp reduceIExp reduceNav desugarDecl sugarDecl desugarLocId sugarLocId desugarQuant sugarQuant transModule transElement transClafer transPExp transIExp rootTClafer claferTClafernumeric isTInteger isTString isTBoolean getTClafergetTClaferByUIDgetTClaferFromIExp getDrefTMapgetDrefTMapByUID hierarchy hierarchyMap unionType fromUnionType collapseUnion intersectiongetIfThenElseType composition addHierarchyclosuregetTMaps getTClaferscoerce coerceRightsimpleScopeAnalysis getOptions getFragmentsgetStatsgetGraph getCommentsOkBad$fAlternativeErr$fMonadPlusErr $fFunctorErr$fApplicativeErr $fMonadErr HappyAddrHappyA#HappyStk Happy_IntList HappyConsHappyAny HappyAbsSynhappyIn8 happyOut8happyIn9 happyOut9 happyIn10 happyOut10 happyIn11 happyOut11 happyIn12 happyOut12 happyIn13 happyOut13 happyIn14 happyOut14 happyIn15 happyOut15 happyIn16 happyOut16 happyIn17 happyOut17 happyIn18 happyOut18 happyIn19 happyOut19 happyIn20 happyOut20 happyIn21 happyOut21 happyIn22 happyOut22 happyIn23 happyOut23 happyIn24 happyOut24 happyIn25 happyOut25 happyIn26 happyOut26 happyIn27 happyOut27 happyIn28 happyOut28 happyIn29 happyOut29 happyIn30 happyOut30 happyIn31 happyOut31 happyIn32 happyOut32 happyIn33 happyOut33 happyIn34 happyOut34 happyIn35 happyOut35 happyIn36 happyOut36 happyIn37 happyOut37 happyIn38 happyOut38 happyIn39 happyOut39 happyIn40 happyOut40 happyIn41 happyOut41 happyIn42 happyOut42 happyIn43 happyOut43 happyIn44 happyOut44 happyIn45 happyOut45 happyIn46 happyOut46 happyIn47 happyOut47 happyIn48 happyOut48 happyIn49 happyOut49 happyIn50 happyOut50 happyIn51 happyOut51 happyIn52 happyOut52 happyIn53 happyOut53 happyIn54 happyOut54 happyIn55 happyOut55 happyIn56 happyOut56 happyIn57 happyOut57 happyIn58 happyOut58 happyIn59 happyOut59 happyIn60 happyOut60 happyIn61 happyOut61 happyIn62 happyOut62 happyIn63 happyOut63 happyIn64 happyOut64 happyIn65 happyOut65 happyInTok happyOutTokhappyActOffsetshappyGotoOffsetshappyDefActions happyCheck happyTablehappyReduceArr happy_n_termshappy_n_nonterms happyReduce_5happyReduction_5 happyReduce_6happyReduction_6 happyReduce_7happyReduction_7 happyReduce_8happyReduction_8 happyReduce_9happyReduction_9happyReduce_10happyReduction_10happyReduce_11happyReduction_11happyReduce_12happyReduction_12happyReduce_13happyReduction_13happyReduce_14happyReduction_14happyReduce_15happyReduction_15happyReduce_16happyReduction_16happyReduce_17happyReduction_17happyReduce_18happyReduction_18happyReduce_19happyReduction_19happyReduce_20happyReduction_20happyReduce_21happyReduction_21happyReduce_22happyReduction_22happyReduce_23happyReduction_23happyReduce_24happyReduction_24happyReduce_25happyReduction_25happyReduce_26happyReduction_26happyReduce_27happyReduction_27happyReduce_28happyReduction_28happyReduce_29happyReduction_29happyReduce_30happyReduction_30happyReduce_31happyReduction_31happyReduce_32happyReduction_32happyReduce_33happyReduction_33happyReduce_34happyReduction_34happyReduce_35happyReduction_35happyReduce_36happyReduction_36happyReduce_37happyReduction_37happyReduce_38happyReduction_38happyReduce_39happyReduction_39happyReduce_40happyReduction_40happyReduce_41happyReduction_41happyReduce_42happyReduction_42happyReduce_43happyReduction_43happyReduce_44happyReduction_44happyReduce_45happyReduction_45happyReduce_46happyReduction_46happyReduce_47happyReduction_47happyReduce_48happyReduction_48happyReduce_49happyReduction_49happyReduce_50happyReduction_50happyReduce_51happyReduction_51happyReduce_52happyReduction_52happyReduce_53happyReduction_53happyReduce_54happyReduction_54happyReduce_55happyReduction_55happyReduce_56happyReduction_56happyReduce_57happyReduction_57happyReduce_58happyReduction_58happyReduce_59happyReduction_59happyReduce_60happyReduction_60happyReduce_61happyReduction_61happyReduce_62happyReduction_62happyReduce_63happyReduction_63happyReduce_64happyReduction_64happyReduce_65happyReduction_65happyReduce_66happyReduction_66happyReduce_67happyReduction_67happyReduce_68happyReduction_68happyReduce_69happyReduction_69happyReduce_70happyReduction_70happyReduce_71happyReduction_71happyReduce_72happyReduction_72happyReduce_73happyReduction_73happyReduce_74happyReduction_74happyReduce_75happyReduction_75happyReduce_76happyReduction_76happyReduce_77happyReduction_77happyReduce_78happyReduction_78happyReduce_79happyReduction_79happyReduce_80happyReduction_80happyReduce_81happyReduction_81happyReduce_82happyReduction_82happyReduce_83happyReduction_83happyReduce_84happyReduction_84happyReduce_85happyReduction_85happyReduce_86happyReduction_86happyReduce_87happyReduction_87happyReduce_88happyReduction_88happyReduce_89happyReduction_89happyReduce_90happyReduction_90happyReduce_91happyReduction_91happyReduce_92happyReduction_92happyReduce_93happyReduction_93happyReduce_94happyReduction_94happyReduce_95happyReduction_95happyReduce_96happyReduction_96happyReduce_97happyReduction_97happyReduce_98happyReduction_98happyReduce_99happyReduction_99happyReduce_100happyReduction_100happyReduce_101happyReduction_101happyReduce_102happyReduction_102happyReduce_103happyReduction_103happyReduce_104happyReduction_104happyReduce_105happyReduction_105happyReduce_106happyReduction_106happyReduce_107happyReduction_107happyReduce_108happyReduction_108happyReduce_109happyReduction_109happyReduce_110happyReduction_110happyReduce_111happyReduction_111happyReduce_112happyReduction_112happyReduce_113happyReduction_113happyReduce_114happyReduction_114happyReduce_115happyReduction_115happyReduce_116happyReduction_116happyReduce_117happyReduction_117happyReduce_118happyReduction_118happyReduce_119happyReduction_119happyReduce_120happyReduction_120happyReduce_121happyReduction_121happyReduce_122happyReduction_122happyReduce_123happyReduction_123happyReduce_124happyReduction_124happyReduce_125happyReduction_125happyReduce_126happyReduction_126happyReduce_127happyReduction_127happyReduce_128happyReduction_128happyReduce_129happyReduction_129happyReduce_130happyReduction_130happyReduce_131happyReduction_131happyReduce_132happyReduction_132happyReduce_133happyReduction_133happyReduce_134happyReduction_134happyReduce_135happyReduction_135happyReduce_136happyReduction_136happyReduce_137happyReduction_137happyReduce_138happyReduction_138happyReduce_139happyReduction_139happyReduce_140happyReduction_140happyReduce_141happyReduction_141happyReduce_142happyReduction_142 happyNewToken happyError_ happyThen happyReturn happyThen1 happyReturn1 happyError'pModulepClafer pConstraint pAssertionpGoalhappySeqreturnMthenM happyErrormyLexergppp mkCatSpan mkTokenSpan happyParse happyAccept happyDoActionindexShortOffAddr happyShifthappySpecReduce_0happySpecReduce_1happySpecReduce_2happySpecReduce_3 happyReducehappyMonadReducehappyMonad2Reduce happyDrop happyDropStk happyGoto happyFail notHappyAtAll happyTcHack happyDoSeq happyDontSeq ClaferArgsmodeconsole_outputflatten_inheritancetimeout_analysis no_layout new_layoutcheck_duplicates skip_resolver keep_unusedno_statsvalidatetooldir alloy_mappingself_contained add_graphshow_references add_comments ecore2claferscope_strategyafm meta_datafile ScopeStrategyNoneSimple ClaferModeAlloyJSONHtmlGraphCVLGraphChococlafer mergeArgsmainArgsretrieveModelFromURLargsWithOPTIONSdefaultClaferArgs$fDefaultScopeStrategy$fDefaultClaferMode genModulegetScopeStrategy ThrowabletoErr PartialErrPos ErrFragPospFragIdpFragPos ErrFragSpan pFragSpan ErrModelPos pModelPos ErrModelSpan pModelSpanErrPosfragIdfragPosmodelPosCErrs ClaferErrserrsCErr ClaferErrmsgParseErrpos SemanticErr ClaferSErrs ClaferSErrClaferTClaferM ClaferEnvargs modelFragscAstcIrfragsastModuleTrace otherTokens irModuleTrace uidIClaferMapgetAstgetIrmakeEnv throwErrsthrowErr catchErrsgetEnvgetsEnv modifyEnvputEnv runClaferT runClaferLEnvExTokenNewLineLastNlLayEnvlevellevelsinputoutputbrCtrgetToken layoutOpen layoutClose resolveLayoutresolveindentdedenttoToken isExTokenIn isNewLine incrGlobal tokenLookuppositionlinecolumn isTokenIn isLayoutOpen isBracketOpen isLayoutCloseisBracketClose tokenLength addNewLines addNewLines'adjustupdTokenaddToken resLayoutresolveLayout' handleIndentemitreadC eatSpaces emitIndent emitDedentisEofgetc revertLayout revertLayout'printPreComment printCommentprintStandaloneCommentprintInlineCommentgenHtmlgenText genTooltip printModuleprintDeclaration printDecl cleanOutputhighlightErrorsgenSimpleGraph genCVLGraphoptimizeModuleoptimizeElementoptimizeClafermultInt multExIntmakeZeroUnusedAbs remUnusedAbs findUnusedAbsgetUniqExtended getExtended expModule expClafer expElementexpPExpexpIExpexpDeclexpNavexpNav'split' allUniquecheckConstraintElementcheckConstraintPExpcheckConstraintIExpcheckConstraintIDecl findDupModule markTopModule markTopClafermarkTopElement markTopPExp markTopIExp markTopDeclResolve HowResolvedSpecial TypeSpecialBinding SubclafersAncestor AbsClafer TopClaferSEnvclaferscontext subClafers ancClafersbindingsresPathgenvaClaferscClafersdefSEnvcheckDuplicateSiblingscheckDuplicateSiblings' checkForJustcheckListDuplicatescheckListDuplicates' isIEClaferresolveModuleNames resolveClafermkAncestorListresolveElement resolvePExp liftError processDecl resolveNavmkPathtoTupletoNav'adjustAncestormkPath' resolveNameresolveImmName resolveNoneresolveSpecial resolveBindresolveDescendantsresolveChildrenresolveReferenceresolveChildren' liftMayberesolveAncestorresolveTopLevel toNodeDeepallInhChildren allChildrenselectChildren findUnique findFirstshowPathisNamespaceConflict filterPathsresolveTModuleresolveNModuleresolveNClafer resolveNSuperresolveNElementresolveNresolveHierarchyresolveOModuleresolveOClaferresolveOReferenceresolveOElement analyzeModule analyzeClafer analyzeGCard analyzeCardanalyzeElementresolveEModuleunrollableModuleunrollabeDeclarationunrollableClafergetDirUnrollablesresolveEClafer renameClafer renameClafer'genIdresolveEInheritanceresolveEElementresolveRedefinition!relocateTopLevelAbstractToParents resolveModule nameModule nameElement nameClafernamePExpnameIExp nameIDeclresolveNamesModuleCompilerResult extension outputCode statistics claferEnvmappingToAlloy stringMap scopesListNoCompilerResultreason InputModel runCompileraddModuleFragmentparsedesugarcompile generateHtmlgenerateStateNormQuotgetURLcatchIObindirlibdirdatadir libexecdir sysconfdirbase GHC.Float UIDLpqNameMap UIDFqNameMap FQNameUIDMapFQKeyderiveFQNameUIDMaps addElements addClaferfindUIDsByFQNamereverseOnQualifiergetFQKeygetQNameFromKeyderiveUidLpqNameMapgenerateUIDLpqMapEntrygenerateQNameUIDArrayEntrygenerateLpqNameScopeArrayEntryprettyPrintJSONtraverseModuletraverseDeclarationtraverseClafertraverseConstrainttraverseAssertion traverseGoaltraverseAbstracttraverseElementstraverseElement traverseSupertraverseReference traverseInittraverseInitHow traverseGCard traverseCard traverseNCardtraverseExInteger traverseName traverseExp traverseDecl traverseQuanttraverseEnumId traverseModId traverseLocId analyzeSupers analyzeRefsanalyzeConstraintsanalyzeDependencies dependencyanalyzeHierarchy directSuperfindConstraints childClafers unfoldJoins getFragments' getStats' getGraph' getComments'readLine readBlock readBlock'AlloyEnvlineColmappingGenEnv claferargs forScopesgenAlloyEscapesgenDeclarationmkFact genAssertNamemkAssertmkSetshowSet optShowSet genClafer claferDecl genOptCard genRelations genRelName genRefNamegenRel genAlloyRelrefType getTargetgenTypegenConstraintsgenSetUniquenessConstraintgenParentSubrelationConstriantgenRefSubrelationConstriantgenParentConstgenOptParentConst genGroupConstmkCardgenCard genCardCrudegenIntervalCrude genInterval cardConcatcardLowerConcatcardUpperConcat genExIntegergenPExpgenPExp' transformExp genIFunExpoptBrArg interleavebrArggenOp adjustPExp adjustIExp adjustNavgenQuantgenDeclgenDisj mapLineColaddCode mapLineCol' addColumn countLeading countTrailinglinenofirstCol firstLine removerightgetRight ClaferErrPostoErrPosaddPosminusPosinSpan$fThrowableCErr$fClaferErrPosPartialErrPos$fClaferErrPosErrPos$fClaferErrPosSpanprintDeprecated printElement printElements printClafer printGoal printAbstract printGCard printNCardprintExInteger printName printModId printPosIdentprintPosIdentRef printSuperprintReference printCardprintConstraintprintConstraint'printAssertionprintAssertion' printInit printInitHowprintExp printQuant printEnumId printIndent printIndentIdprintIndentEnddropUidrestgetUidgetDivIdgetUseIdwhiletrimhighlightErrors'graphSimpleModulegraphSimpleDeclarationgraphSimpleElementgraphSimpleElementsgraphSimpleClaferparentgraphSimpleSupergraphSimpleReference refColourgraphSimpleNamegraphSimpleModIdgraphSimplePosIdentgraphSimpleExpgraphCVLModulegraphCVLDeclarationgraphCVLElementgraphCVLElementsgraphCVLClafer graphCVLSupergraphCVLReference graphCVLName graphCVLModIdgraphCVLPosIdentgraphCVLConstraintgraphCVLAssertion graphCVLGoal graphCVLCard graphCVLNCardgraphCVLExInteger graphCVLGCard graphCVLExp choiceCard lowerCardgetExpId htmlChars TAReferences TAExpressionsrunTypeAnalysisTAModeMonadTypeAnalysiscurThis localCurThiscurPath localCurPath typeDecls localDecls TypeAnalysisTypeInfo iTypeDeclsiUIDIClaferMapiCurThisiCurPath TypeDecls typeOfUid claferWithUidparentOfisIndirectChildisChildstrshowTyperesolveTElementresolveTConstraint resolveTPExp resolveTPExp'addDrefaddSometypeOfwithType<++>liftList comparingsyntaxOfsameAs$fMonadTypeAnalysisExceptT$fMonadTypeAnalysisListT$fMonadTypeAnalysisTypeAnalysis liftParseErrs liftParseErrsavesummarysummary' runValidate validateAlloy validateChoco validateGraphiExpBasedChecksiClaferBasedChecksanalyzeaddStats showStats showIntervalgatherObjectivesAndAttributes