úÎ7À3@%      !"#$Safe+0)Opaque license exception identifier type.Opaque license identifier type.%& %& %& Safe '()  '()Safe$A list of SPDX licenses identifiers.See  http://spdx.org/licenses/.Lookup  by string representationWhether license is OSI approvedSee +http://opensource.org/licenses/alphabetical A list of 7, license name and whether the license is OSI approved.See  http://spdx.org/licenses/.*+*+SafeParse SPDX License Expression!parseExpression "LGPL-2.1 OR MIT"y[EDisjunction (ELicense False (Right (LicenseId "LGPL-2.1")) Nothing) (ELicense False (Right (LicenseId "MIT")) Nothing)],-./0123456789:,-./0123456789:,Safe#Lookup newer licenses we know about1lookupLicenseRange $ fromJust $ mkLicenseId "MIT"[LicenseId "MIT"]5lookupLicenseRange $ fromJust $ mkLicenseId "GPL-2.0")[LicenseId "GPL-2.0",LicenseId "GPL-3.0"]6lookupLicenseRange $ fromJust $ mkLicenseId "LGPL-2.0"@[LicenseId "LGPL-2.0",LicenseId "LGPL-2.1",LicenseId "LGPL-3.0"];<=>?@;<=>?@General lattice tools(c) 2015 Oleg GrenrusBSD3"Oleg Grenrus <oleg.grenrus@iki.fi>Safe+-./ Test for equivalence.Fequivalent (LMeet (LVar 'a') (LVar 'b')) (LMeet (LVar 'b') (LVar 'a'))True3equivalent (LVar 'a') (LMeet (LVar 'a') (LVar 'a'))TrueFequivalent (LMeet (LVar 'a') (LVar 'b')) (LMeet (LVar 'b') (LVar 'b'))False!Test for preorder.  a "d b !Ô a "( b "a b !Ô a "a a "' b/preorder (LVar 'a' `LMeet` LVar 'b') (LVar 'a')True/preorder (LVar 'a') (LVar 'a' `LMeet` LVar 'b')False"Return A8 if for some variable assigment expression evaluates to A.BLike if$, but where the test can be monadic.C The lazy DC operator lifted to a monad. If the first argument evaluates to A. the second argument will not be evaluated. uJust True ||^ undefined == Just True Just False ||^ Just True == Just True Just False ||^ Just False == Just FalseE The lazy FC operator lifted to a monad. If the first argument evaluates to G. the second argument will not be evaluated. vJust False &&^ undefined == Just False Just True &&^ Just True == Just True Just True &&^ Just False == Just FalseHIJ !"KLMBCENOPQRST  !"  !"HIJ !"KLMBCENOPQRST%SPDX licenses and expression language(c) 2015 Oleg GrenrusBSD3"Oleg Grenrus <oleg.grenrus@iki.fi>Safe# %'æ satisfies a b 'ç "a a "e b "a a "' b = bCunsafeParseExpr "GPL-3.0" `satisfies` unsafeParseExpr "ISC AND MIT"FalseIunsafeParseExpr "Zlib" `satisfies` unsafeParseExpr "ISC AND MIT AND Zlib"TrueNunsafeParseExpr "(MIT OR GPL-2.0)" `satisfies` unsafeParseExpr "(ISC AND MIT)"TrueSunsafeParseExpr "(MIT AND GPL-2.0)" `satisfies` unsafeParseExpr "(MIT AND GPL-2.0)"TrueSunsafeParseExpr "(MIT AND GPL-2.0)" `satisfies` unsafeParseExpr "(ISC AND GPL-2.0)"False$Check wheather two  are equivalent.TunsafeParseExpr "(MIT AND GPL-2.0)" `equivalent` unsafeParseExpr "(GPL-2.0 AND MIT)"TrueHunsafeParseExpr "MIT" `equivalent` unsafeParseExpr "MIT OR BSD-3-Clause"FalseUVW#package licenselicense policy$ #$    #$UVW#$X      !"#$%&'()*'  +,-./0123456789-:;<=>?@ABCDEFGHDIJKDILDEMNNOPQRSTUVWXYZZ[\ spdx-0.2.1.0 Data.SPDXData.SPDX.LatticeSyntaxData.SPDX.TypesData.SPDX.PrettyData.SPDX.LicensesData.SPDX.ParserData.SPDX.RangesLicenseExpression EDisjunction EConjunctionELicenseLicenseExceptionId LicenseId LicenseRef lrDocument lrLicense getLicenseIdgetLicenseExceptionIdprettyLicenseIdprettyLicenseExceptionIdprettyLicenseRefprettyLicenseExpressionlicenseExceptionslicenseIdentifiers mkLicenseId isOsiApprovedlicensesparseExpressionunsafeParseExpr licenseRangeslookupLicenseRange LatticeSyntaxLMeetLJoinLBoundLVarfreeVarsdual equivalentpreorder satisfiable satisfies pprLicensepprExprparensfstOf3trdOf3ap'<<licenselicenseException licenseRef mkLicenseelicense elicenseRefidString skipSpaces1terminal conjunction disjunction expressionranges'nullOrSingleton restIsNumberprefprefixeslongerThanSingletonghc-prim GHC.TypesTrueifM||^ GHC.Classes||&&^&&FalseEvalunEvalrunEval evalLatticeguess$fMonadPlusEval $fMonadEval$fAlternativeEval$fApplicativeEval $fFunctorEval$fMonadLatticeSyntax$fApplicativeLatticeSyntaxLic exprToLSLic