{-# LANGUAGE DeriveAnyClass #-}
module Horizon.Spec.Types.HaskellPackage
  ( HaskellPackage(MkHaskellPackage)
  , source
  , modifiers
  , flags
  , mkHaskellPackage
  ) where

import           Data.Kind                        (Type)
import           Dhall                            (FromDhall, Generic, ToDhall)
import           Horizon.Spec.Types.CabalFlag     (CabalFlag)
import           Horizon.Spec.Types.HaskellSource (HaskellSource)
import           Horizon.Spec.Types.Modifiers     (Modifiers, defaultModifiers)

type HaskellPackage :: Type
data HaskellPackage where
  MkHaskellPackage :: { HaskellPackage -> HaskellSource
source :: HaskellSource
                      , HaskellPackage -> Modifiers
modifiers :: Modifiers
                      , HaskellPackage -> [CabalFlag]
flags :: [CabalFlag] } -> HaskellPackage
  deriving stock (Int -> HaskellPackage -> ShowS
[HaskellPackage] -> ShowS
HaskellPackage -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HaskellPackage] -> ShowS
$cshowList :: [HaskellPackage] -> ShowS
show :: HaskellPackage -> String
$cshow :: HaskellPackage -> String
showsPrec :: Int -> HaskellPackage -> ShowS
$cshowsPrec :: Int -> HaskellPackage -> ShowS
Show, HaskellPackage -> HaskellPackage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HaskellPackage -> HaskellPackage -> Bool
$c/= :: HaskellPackage -> HaskellPackage -> Bool
== :: HaskellPackage -> HaskellPackage -> Bool
$c== :: HaskellPackage -> HaskellPackage -> Bool
Eq, forall x. Rep HaskellPackage x -> HaskellPackage
forall x. HaskellPackage -> Rep HaskellPackage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep HaskellPackage x -> HaskellPackage
$cfrom :: forall x. HaskellPackage -> Rep HaskellPackage x
Generic)
  deriving anyclass (InputNormalizer -> Decoder HaskellPackage
forall a. (InputNormalizer -> Decoder a) -> FromDhall a
autoWith :: InputNormalizer -> Decoder HaskellPackage
$cautoWith :: InputNormalizer -> Decoder HaskellPackage
FromDhall, InputNormalizer -> Encoder HaskellPackage
forall a. (InputNormalizer -> Encoder a) -> ToDhall a
injectWith :: InputNormalizer -> Encoder HaskellPackage
$cinjectWith :: InputNormalizer -> Encoder HaskellPackage
ToDhall)

mkHaskellPackage :: HaskellSource -> HaskellPackage
mkHaskellPackage :: HaskellSource -> HaskellPackage
mkHaskellPackage HaskellSource
x = MkHaskellPackage { $sel:source:MkHaskellPackage :: HaskellSource
source = HaskellSource
x, $sel:flags:MkHaskellPackage :: [CabalFlag]
flags = [], $sel:modifiers:MkHaskellPackage :: Modifiers
modifiers = Modifiers
defaultModifiers }