úÎ7ž3y%      !"#$ Safe-Inferred+0)Opaque license exception identifier type.Opaque license identifier type.%& %& %&  Safe-Inferred '()  '() Safe-Inferred$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/.*+*+ Safe-InferredParse 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)],-./012345678,-./012345678 Safe-Inferred#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"]9:;<=>9:;<=>General lattice tools(c) 2015 Oleg GrenrusBSD3"Oleg Grenrus <oleg.grenrus@iki.fi>None+-./B 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 ?8 if for some variable assigment expression evaluates to ?.@Like if$, but where the test can be monadic.A The lazy BC operator lifted to a monad. If the first argument evaluates to ?. the second argument will not be evaluated. uJust True ||^ undefined == Just True Just False ||^ Just True == Just True Just False ||^ Just False == Just FalseC The lazy DC operator lifted to a monad. If the first argument evaluates to E. the second argument will not be evaluated. vJust False &&^ undefined == Just False Just True &&^ Just True == Just True Just True &&^ Just False == Just FalseFGH !"IJK@ACLM  !"  !"FGH !"IJK@ACLM%SPDX licenses and expression language(c) 2015 Oleg GrenrusBSD3"Oleg Grenrus <oleg.grenrus@iki.fi>None# %'æ 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"FalseNOP#package licenselicense policy$ #$    #$NOP#$Q      !"#$%&'()*'  +,-./01234567-89:;<=>?@ABCDEFBGHIBGJBCKLLMNOPQRSSTU spdx-0.2.0.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 pprLicensepprExprparensfstOf3trdOf3licenselicenseException licenseRef mkLicenseelicense elicenseRefidString skipSpaces1terminal conjunction disjunction expressionranges'nullOrSingleton restIsNumberprefprefixeslongerThanSingletonghc-prim GHC.TypesTrueifM||^ GHC.Classes||&&^&&FalseEvalunEvalrunEval evalLatticeguess$fMonadLatticeSyntax$fApplicativeLatticeSyntaxLic exprToLSLic