|
| 1 | +{-# LANGUAGE NoImplicitPrelude #-} |
| 2 | +{-# LANGUAGE DeriveFunctor #-} |
| 3 | +{-# LANGUAGE DeriveGeneric #-} |
| 4 | +{-# LANGUAGE DeriveDataTypeable #-} |
| 5 | +{-# LANGUAGE GeneralizedNewtypeDeriving #-} |
| 6 | +{-# LANGUAGE OverloadedStrings #-} |
| 7 | +{-# LANGUAGE RankNTypes #-} |
| 8 | +{-# LANGUAGE FlexibleContexts #-} |
| 9 | +{-# LANGUAGE DataKinds #-} |
| 10 | +{-# LANGUAGE ConstraintKinds #-} |
| 11 | + |
| 12 | +module Stack.Types.PackageComponent where |
| 13 | + |
| 14 | +import Stack.Prelude |
| 15 | +import Stack.Types.NamedComponent (NamedComponent(CLib)) |
| 16 | + |
| 17 | +-- | Required for component-addressed build plans. |
| 18 | +-- Before introducing this, most packages were 'PackageName' addressed. |
| 19 | +-- See <https://github.com/commercialhaskell/stack/issues/4745 this issue> |
| 20 | +-- for more details. |
| 21 | +data PackageComponentName = PackageComponentName { |
| 22 | + packageName :: !PackageName, |
| 23 | + componentName :: !NamedComponent |
| 24 | +} deriving (Eq, Show, Ord) |
| 25 | + |
| 26 | +-- | This is needed for computing the largest packageName length in a BuildPlan. |
| 27 | +-- See <../Build/Execute.hs#504 this file> |
| 28 | +getPackageNameLength :: PackageComponentName -> Int |
| 29 | +getPackageNameLength PackageComponentName{packageName=pn} = length . packageNameString $ pn |
| 30 | + |
| 31 | +-- | This is the main case for most packages, you only depend on their default library. |
| 32 | +libraryPackage :: PackageName -> PackageComponentName |
| 33 | +libraryPackage pckName = PackageComponentName { |
| 34 | + packageName = pckName, |
| 35 | + componentName = CLib |
| 36 | + } |
| 37 | + |
| 38 | +forgetComponentName :: PackageComponentName -> PackageName |
| 39 | +forgetComponentName = packageName |
0 commit comments