1{-# LANGUAGE NoImplicitPrelude #-} 2{-# LANGUAGE OverloadedStrings #-} 3module Stack.Types.NamedComponent 4 ( NamedComponent (..) 5 , renderComponent 6 , renderPkgComponents 7 , renderPkgComponent 8 , exeComponents 9 , testComponents 10 , benchComponents 11 , internalLibComponents 12 , isCLib 13 , isCInternalLib 14 , isCExe 15 , isCTest 16 , isCBench 17 ) where 18 19import Pantry 20import Stack.Prelude 21import qualified Data.Set as Set 22import qualified Data.Text as T 23 24-- | A single, fully resolved component of a package 25data NamedComponent 26 = CLib 27 | CInternalLib !Text 28 | CExe !Text 29 | CTest !Text 30 | CBench !Text 31 deriving (Show, Eq, Ord) 32 33renderComponent :: NamedComponent -> Text 34renderComponent CLib = "lib" 35renderComponent (CInternalLib x) = "internal-lib:" <> x 36renderComponent (CExe x) = "exe:" <> x 37renderComponent (CTest x) = "test:" <> x 38renderComponent (CBench x) = "bench:" <> x 39 40renderPkgComponents :: [(PackageName, NamedComponent)] -> Text 41renderPkgComponents = T.intercalate " " . map renderPkgComponent 42 43renderPkgComponent :: (PackageName, NamedComponent) -> Text 44renderPkgComponent (pkg, comp) = fromString (packageNameString pkg) <> ":" <> renderComponent comp 45 46exeComponents :: Set NamedComponent -> Set Text 47exeComponents = Set.fromList . mapMaybe mExeName . Set.toList 48 where 49 mExeName (CExe name) = Just name 50 mExeName _ = Nothing 51 52testComponents :: Set NamedComponent -> Set Text 53testComponents = Set.fromList . mapMaybe mTestName . Set.toList 54 where 55 mTestName (CTest name) = Just name 56 mTestName _ = Nothing 57 58benchComponents :: Set NamedComponent -> Set Text 59benchComponents = Set.fromList . mapMaybe mBenchName . Set.toList 60 where 61 mBenchName (CBench name) = Just name 62 mBenchName _ = Nothing 63 64internalLibComponents :: Set NamedComponent -> Set Text 65internalLibComponents = Set.fromList . mapMaybe mInternalName . Set.toList 66 where 67 mInternalName (CInternalLib name) = Just name 68 mInternalName _ = Nothing 69 70isCLib :: NamedComponent -> Bool 71isCLib CLib{} = True 72isCLib _ = False 73 74isCInternalLib :: NamedComponent -> Bool 75isCInternalLib CInternalLib{} = True 76isCInternalLib _ = False 77 78isCExe :: NamedComponent -> Bool 79isCExe CExe{} = True 80isCExe _ = False 81 82isCTest :: NamedComponent -> Bool 83isCTest CTest{} = True 84isCTest _ = False 85 86isCBench :: NamedComponent -> Bool 87isCBench CBench{} = True 88isCBench _ = False 89