hpack-0.29.0: src/Hpack/License.hs
{-# LANGUAGE DeriveFunctor #-}
module Hpack.License where
import qualified Distribution.License as Cabal
import qualified Distribution.SPDX.License as SPDX
import Distribution.Parsec.Class (eitherParsec)
data License a = DontTouch | CanSPDX a | MustSPDX a
deriving (Eq, Show, Functor)
parseLicense :: String -> License SPDX.License
parseLicense license = case spdxLicense of
Right l | isUnknown -> MustSPDX l
Left _ | isUnknown -> DontTouch
Right l -> CanSPDX l
Left _ -> case cabalLicense of
Right l -> CanSPDX (Cabal.licenseToSPDX l)
Left _ -> DontTouch
where
spdxLicense :: Either String SPDX.License
spdxLicense = eitherParsec license
cabalLicense :: Either String Cabal.License
cabalLicense = eitherParsec license
isUnknown = license `notElem` knownLicenses
knownLicenses = [
"GPL"
, "GPL-2"
, "GPL-3"
, "LGPL"
, "LGPL-2.1"
, "LGPL-3"
, "AGPL"
, "AGPL-3"
, "BSD2"
, "BSD3"
, "BSD4"
, "MIT"
, "ISC"
, "MPL-2.0"
, "Apache"
, "Apache-2.0"
, "PublicDomain"
, "AllRightsReserved"
, "OtherLicense"
]