cabal2nix-1.45: src/Distribution/NixOS/Derivation/License.hs
{- |
Module : Distribution.NixOS.Derivation.License
License : BSD3
Maintainer : nix-dev@cs.uu.nl
Stability : provisional
Portability : portable
Known licenses in Nix expressions are represented using the
attributes defined in @pkgs\/lib\/licenses.nix@, and unknown licenses
are represented as a literal string.
-}
module Distribution.NixOS.Derivation.License ( License(..) ) where
import Distribution.NixOS.PrettyPrinting
import Distribution.Text
import Data.Maybe
-- | The representation for licenses used in Nix derivations. Known
-- licenses are Nix expressions -- such as @stdenv.lib.licenses.bsd3@
-- --, so their exact \"name\" is not generally known, because the path
-- to @stdenv@ depends on the context defined in the expression. In
-- Cabal expressions, for example, the BSD3 license would have to be
-- referred to as @self.stdenv.lib.licenses.bsd3@. Other expressions,
-- however, use different paths to the @licenses@ record.. Because of
-- this station, this library cannot provide an abstract data type that
-- encompasses all known licenses. Instead, the @License@ type just
-- distinguishes references to known and unknown licenses. The
-- difference between the two is in the way they are pretty-printed:
--
-- > > putStrLn (display (Known "stdenv.lib.license.gpl2"))
-- > stdenv.lib.license.gpl2
-- >
-- > > putStrLn (display (Unknown (Just "GPL")))
-- > "GPL"
-- >
-- > > putStrLn (display (Unknown Nothing))
-- > "unknown"
--
-- Note that the "Text" instance definition provides pretty-printing,
-- but no parsing as of now!
data License = Known String
| Unknown (Maybe String)
deriving (Show, Eq, Ord)
instance Text License where
disp (Known x) = text x
disp (Unknown x) = string (fromMaybe "unknown" x)
parse = error "parsing Distribution.NixOS.Derivation.License is not supported yet"