{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TemplateHaskell #-} module Distribution.Nixpkgs.Haskell.BuildInfo ( BuildInfo , haskell, pkgconfig, system, tool, pPrintBuildInfo ) where import Control.DeepSeq import Control.Lens import Data.Semigroup as Sem import Data.Set ( Set ) import Data.Set.Lens import GHC.Generics ( Generic ) import Language.Nix import Language.Nix.PrettyPrinting hiding ( (<>) ) data BuildInfo = BuildInfo { BuildInfo -> Set Binding _haskell :: Set Binding , BuildInfo -> Set Binding _pkgconfig :: Set Binding , BuildInfo -> Set Binding _system :: Set Binding , BuildInfo -> Set Binding _tool :: Set Binding } deriving (Int -> BuildInfo -> ShowS [BuildInfo] -> ShowS BuildInfo -> String (Int -> BuildInfo -> ShowS) -> (BuildInfo -> String) -> ([BuildInfo] -> ShowS) -> Show BuildInfo forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [BuildInfo] -> ShowS $cshowList :: [BuildInfo] -> ShowS show :: BuildInfo -> String $cshow :: BuildInfo -> String showsPrec :: Int -> BuildInfo -> ShowS $cshowsPrec :: Int -> BuildInfo -> ShowS Show, BuildInfo -> BuildInfo -> Bool (BuildInfo -> BuildInfo -> Bool) -> (BuildInfo -> BuildInfo -> Bool) -> Eq BuildInfo forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: BuildInfo -> BuildInfo -> Bool $c/= :: BuildInfo -> BuildInfo -> Bool == :: BuildInfo -> BuildInfo -> Bool $c== :: BuildInfo -> BuildInfo -> Bool Eq, (forall x. BuildInfo -> Rep BuildInfo x) -> (forall x. Rep BuildInfo x -> BuildInfo) -> Generic BuildInfo forall x. Rep BuildInfo x -> BuildInfo forall x. BuildInfo -> Rep BuildInfo x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep BuildInfo x -> BuildInfo $cfrom :: forall x. BuildInfo -> Rep BuildInfo x Generic) makeLenses ''BuildInfo instance Each BuildInfo BuildInfo (Set Binding) (Set Binding) where each :: (Set Binding -> f (Set Binding)) -> BuildInfo -> f BuildInfo each Set Binding -> f (Set Binding) f (BuildInfo Set Binding a Set Binding b Set Binding c Set Binding d) = Set Binding -> Set Binding -> Set Binding -> Set Binding -> BuildInfo BuildInfo (Set Binding -> Set Binding -> Set Binding -> Set Binding -> BuildInfo) -> f (Set Binding) -> f (Set Binding -> Set Binding -> Set Binding -> BuildInfo) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Set Binding -> f (Set Binding) f Set Binding a f (Set Binding -> Set Binding -> Set Binding -> BuildInfo) -> f (Set Binding) -> f (Set Binding -> Set Binding -> BuildInfo) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Set Binding -> f (Set Binding) f Set Binding b f (Set Binding -> Set Binding -> BuildInfo) -> f (Set Binding) -> f (Set Binding -> BuildInfo) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Set Binding -> f (Set Binding) f Set Binding c f (Set Binding -> BuildInfo) -> f (Set Binding) -> f BuildInfo forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Set Binding -> f (Set Binding) f Set Binding d instance Sem.Semigroup BuildInfo where BuildInfo Set Binding w1 Set Binding x1 Set Binding y1 Set Binding z1 <> :: BuildInfo -> BuildInfo -> BuildInfo <> BuildInfo Set Binding w2 Set Binding x2 Set Binding y2 Set Binding z2 = Set Binding -> Set Binding -> Set Binding -> Set Binding -> BuildInfo BuildInfo (Set Binding w1 Set Binding -> Set Binding -> Set Binding forall a. Semigroup a => a -> a -> a <> Set Binding w2) (Set Binding x1 Set Binding -> Set Binding -> Set Binding forall a. Semigroup a => a -> a -> a <> Set Binding x2) (Set Binding y1 Set Binding -> Set Binding -> Set Binding forall a. Semigroup a => a -> a -> a <> Set Binding y2) (Set Binding z1 Set Binding -> Set Binding -> Set Binding forall a. Semigroup a => a -> a -> a <> Set Binding z2) instance Monoid BuildInfo where mempty :: BuildInfo mempty = Set Binding -> Set Binding -> Set Binding -> Set Binding -> BuildInfo BuildInfo Set Binding forall a. Monoid a => a mempty Set Binding forall a. Monoid a => a mempty Set Binding forall a. Monoid a => a mempty Set Binding forall a. Monoid a => a mempty mappend :: BuildInfo -> BuildInfo -> BuildInfo mappend = BuildInfo -> BuildInfo -> BuildInfo forall a. Semigroup a => a -> a -> a (Sem.<>) instance NFData BuildInfo pPrintBuildInfo :: String -> BuildInfo -> Doc pPrintBuildInfo :: String -> BuildInfo -> Doc pPrintBuildInfo String prefix BuildInfo bi = [Doc] -> Doc vcat [ String -> Doc -> Set String -> Doc setattr (String prefixString -> ShowS forall a. [a] -> [a] -> [a] ++String "HaskellDepends") Doc empty (Getting (Set String) BuildInfo String -> BuildInfo -> Set String forall a s. Getting (Set a) s a -> s -> Set a setOf ((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo Lens' BuildInfo (Set Binding) haskell((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo) -> ((String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding)) -> Getting (Set String) BuildInfo String forall b c a. (b -> c) -> (a -> b) -> a -> c .(Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding) forall (f :: * -> *) a. Foldable f => IndexedFold Int (f a) a folded((Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding)) -> ((String -> Const (Set String) String) -> Binding -> Const (Set String) Binding) -> (String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding) forall b c a. (b -> c) -> (a -> b) -> a -> c .(Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding Lens' Binding Identifier localName((Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding) -> ((String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier) -> (String -> Const (Set String) String) -> Binding -> Const (Set String) Binding forall b c a. (b -> c) -> (a -> b) -> a -> c .(String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier Iso' Identifier String ident) BuildInfo bi) , String -> Doc -> Set String -> Doc setattr (String prefixString -> ShowS forall a. [a] -> [a] -> [a] ++String "SystemDepends") Doc empty (Getting (Set String) BuildInfo String -> BuildInfo -> Set String forall a s. Getting (Set a) s a -> s -> Set a setOf ((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo Lens' BuildInfo (Set Binding) system((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo) -> ((String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding)) -> Getting (Set String) BuildInfo String forall b c a. (b -> c) -> (a -> b) -> a -> c .(Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding) forall (f :: * -> *) a. Foldable f => IndexedFold Int (f a) a folded((Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding)) -> ((String -> Const (Set String) String) -> Binding -> Const (Set String) Binding) -> (String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding) forall b c a. (b -> c) -> (a -> b) -> a -> c .(Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding Lens' Binding Identifier localName((Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding) -> ((String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier) -> (String -> Const (Set String) String) -> Binding -> Const (Set String) Binding forall b c a. (b -> c) -> (a -> b) -> a -> c .(String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier Iso' Identifier String ident) BuildInfo bi) , String -> Doc -> Set String -> Doc setattr (String prefixString -> ShowS forall a. [a] -> [a] -> [a] ++String "PkgconfigDepends") Doc empty (Getting (Set String) BuildInfo String -> BuildInfo -> Set String forall a s. Getting (Set a) s a -> s -> Set a setOf ((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo Lens' BuildInfo (Set Binding) pkgconfig((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo) -> ((String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding)) -> Getting (Set String) BuildInfo String forall b c a. (b -> c) -> (a -> b) -> a -> c .(Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding) forall (f :: * -> *) a. Foldable f => IndexedFold Int (f a) a folded((Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding)) -> ((String -> Const (Set String) String) -> Binding -> Const (Set String) Binding) -> (String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding) forall b c a. (b -> c) -> (a -> b) -> a -> c .(Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding Lens' Binding Identifier localName((Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding) -> ((String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier) -> (String -> Const (Set String) String) -> Binding -> Const (Set String) Binding forall b c a. (b -> c) -> (a -> b) -> a -> c .(String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier Iso' Identifier String ident) BuildInfo bi) , String -> Doc -> Set String -> Doc setattr (String prefixString -> ShowS forall a. [a] -> [a] -> [a] ++String "ToolDepends") Doc empty (Getting (Set String) BuildInfo String -> BuildInfo -> Set String forall a s. Getting (Set a) s a -> s -> Set a setOf ((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo Lens' BuildInfo (Set Binding) tool((Set Binding -> Const (Set String) (Set Binding)) -> BuildInfo -> Const (Set String) BuildInfo) -> ((String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding)) -> Getting (Set String) BuildInfo String forall b c a. (b -> c) -> (a -> b) -> a -> c .(Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding) forall (f :: * -> *) a. Foldable f => IndexedFold Int (f a) a folded((Binding -> Const (Set String) Binding) -> Set Binding -> Const (Set String) (Set Binding)) -> ((String -> Const (Set String) String) -> Binding -> Const (Set String) Binding) -> (String -> Const (Set String) String) -> Set Binding -> Const (Set String) (Set Binding) forall b c a. (b -> c) -> (a -> b) -> a -> c .(Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding Lens' Binding Identifier localName((Identifier -> Const (Set String) Identifier) -> Binding -> Const (Set String) Binding) -> ((String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier) -> (String -> Const (Set String) String) -> Binding -> Const (Set String) Binding forall b c a. (b -> c) -> (a -> b) -> a -> c .(String -> Const (Set String) String) -> Identifier -> Const (Set String) Identifier Iso' Identifier String ident) BuildInfo bi) ]