packages feed

imp-1.0.2.0: source/library/Imp/Type/PackageName.hs

module Imp.Type.PackageName where

import qualified Control.Monad.Catch as Exception
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Types.PackageName as PackageName
import qualified GHC.Data.FastString as FastString
import qualified GHC.Types.SourceText as SourceText
import qualified Imp.Exception.InvalidPackageName as InvalidPackageName

newtype PackageName
  = PackageName PackageName.PackageName
  deriving (Eq, Show)

fromCabal :: PackageName.PackageName -> PackageName
fromCabal = PackageName

toCabal :: PackageName -> PackageName.PackageName
toCabal (PackageName x) = x

fromString :: (Exception.MonadThrow m) => String -> m PackageName
fromString x =
  maybe (Exception.throwM $ InvalidPackageName.new x) (pure . fromCabal) $
    Parsec.simpleParsec x

toStringLiteral :: PackageName -> SourceText.StringLiteral
toStringLiteral x =
  SourceText.StringLiteral
    { SourceText.sl_st = SourceText.NoSourceText,
      SourceText.sl_fs = FastString.mkFastString . PackageName.unPackageName $ toCabal x,
      SourceText.sl_tc = Nothing
    }