prune-juice-0.1: src/Data/Prune/Types.hs
module Data.Prune.Types where
import Prelude
import Data.Aeson ((.:), FromJSON, parseJSON, withObject)
import Data.Set (Set)
import Data.Text (Text)
data CompilableType
= CompilableTypeLibrary
| CompilableTypeExecutable
| CompilableTypeTest
| CompilableTypeBenchmark
deriving (Eq, Ord)
instance Show CompilableType where
show = \case
CompilableTypeLibrary -> "library"
CompilableTypeExecutable -> "executable"
CompilableTypeTest -> "test"
CompilableTypeBenchmark -> "benchmark"
newtype CompilableName = CompilableName { unCompilableName :: Text }
deriving (Eq, Ord, Show)
data DependencyName = DependencyName { unDependencyName :: Text }
deriving (Eq, Ord, Show)
data ModuleName = ModuleName { unModuleName :: Text }
deriving (Eq, Ord, Show)
data Compilable = Compilable
{ compilableName :: CompilableName
, compilableType :: CompilableType
, compilableDependencies :: Set DependencyName
, compilableFiles :: Set FilePath
}
deriving (Eq, Ord, Show)
data Package = Package
{ packageName :: Text
, packageBaseDependencies :: Set DependencyName
, packageCompilables :: [Compilable]
}
deriving (Eq, Ord, Show)
data StackYaml = StackYaml
{ stackYamlPackages :: [FilePath]
-- ^ FIXME not every package is this way.
}
deriving (Eq, Ord, Show)
instance FromJSON StackYaml where
parseJSON = withObject "StackYaml" $ \obj ->
StackYaml
<$> obj .: "packages"