stack-2.15.1: src/Stack/Types/ComponentUtils.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
-- | A module providing a type representing the name of an \'unqualified\'
-- component and related helper functions.
module Stack.Types.ComponentUtils
( StackUnqualCompName (..)
, fromCabalName
, toCabalName
) where
import Distribution.PackageDescription
( UnqualComponentName, mkUnqualComponentName
, unUnqualComponentName
)
import RIO.Text (pack, unpack)
import Stack.Prelude
-- | Type representing the name of an \'unqualified\' component (that is, the
-- component can be any sort - a (unnamed) main library or sub-library,
-- an executable, etc. ).
--
-- The corresponding The Cabal-syntax type is
-- 'Distribution.Types.UnqualComponentName.UnqualComponentName'.
-- Ideally, we would use the Cabal-syntax type and not 'Text', to avoid
-- unnecessary work, but there is no 'Hashable' instance for
-- 'Distribution.Types.UnqualComponentName.UnqualComponentName' yet.
newtype StackUnqualCompName = StackUnqualCompName
{ unqualCompToText :: Text
}
deriving (Data, Eq, Generic, Hashable, IsString, NFData, Ord, Read, Show, Typeable)
fromCabalName :: UnqualComponentName -> StackUnqualCompName
fromCabalName unqualName =
StackUnqualCompName $ pack . unUnqualComponentName $ unqualName
toCabalName :: StackUnqualCompName -> UnqualComponentName
toCabalName (StackUnqualCompName unqualName) =
mkUnqualComponentName (unpack unqualName)