diff options
author | Duncan Coutts <duncan@well-typed.com> | 2014-08-24 21:59:03 +0100 |
---|---|---|
committer | Edward Z. Yang <ezyang@cs.stanford.edu> | 2014-08-29 12:39:05 +0100 |
commit | c72efd7cee77d5f934bbede4ddf680ea348467db (patch) | |
tree | 47eceffbcb76ca82bc67bf0da8da226f9aa820b0 /compiler/main/PackageConfig.hs | |
parent | 1bc2a55542c487ff97455da5f39597bc25bbfa49 (diff) | |
download | haskell-c72efd7cee77d5f934bbede4ddf680ea348467db.tar.gz |
Switch the package id types to use FastString (rather than String)
The conversions should now be correct w.r.t Unicode.
Also move a couple instances to avoid orphan instances.
Strictly speaking there's no need for these types to use FastString as
they do not need the unique feature. They could just use some other
compact string type, but ghc's internal utils don't have much support
for such a type, so we just use FastString.
Diffstat (limited to 'compiler/main/PackageConfig.hs')
-rw-r--r-- | compiler/main/PackageConfig.hs | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/compiler/main/PackageConfig.hs b/compiler/main/PackageConfig.hs index 3124e292c1..038291d6b3 100644 --- a/compiler/main/PackageConfig.hs +++ b/compiler/main/PackageConfig.hs @@ -29,9 +29,9 @@ module PackageConfig ( #include "HsVersions.h" import GHC.PackageDb -import qualified Data.ByteString.Char8 as BS import Data.Version +import FastString import Outputable import Module @@ -46,54 +46,50 @@ type PackageConfig = InstalledPackageInfo Module.PackageKey Module.ModuleName -newtype InstalledPackageId = InstalledPackageId String deriving (Eq, Ord, Show) -newtype SourcePackageId = SourcePackageId String deriving (Eq, Ord, Show) -newtype PackageName = PackageName String deriving (Eq, Ord, Show) +-- TODO: there's no need for these to be FastString, as we don't need the uniq +-- feature, but ghc doesn't currently have convenient support for any +-- other compact string types, e.g. plain ByteString or Text. + +newtype InstalledPackageId = InstalledPackageId FastString deriving (Eq, Ord) +newtype SourcePackageId = SourcePackageId FastString deriving (Eq, Ord) +newtype PackageName = PackageName FastString deriving (Eq, Ord) instance BinaryStringRep InstalledPackageId where - fromStringRep = InstalledPackageId . BS.unpack - toStringRep (InstalledPackageId s) = BS.pack s + fromStringRep = InstalledPackageId . mkFastStringByteString + toStringRep (InstalledPackageId s) = fastStringToByteString s instance BinaryStringRep SourcePackageId where - fromStringRep = SourcePackageId . BS.unpack - toStringRep (SourcePackageId s) = BS.pack s + fromStringRep = SourcePackageId . mkFastStringByteString + toStringRep (SourcePackageId s) = fastStringToByteString s instance BinaryStringRep PackageName where - fromStringRep = PackageName . BS.unpack - toStringRep (PackageName s) = BS.pack s - -instance BinaryStringRep PackageKey where - fromStringRep = Module.stringToPackageKey . BS.unpack - toStringRep = BS.pack . Module.packageKeyString - -instance BinaryStringRep Module.ModuleName where - fromStringRep = Module.mkModuleName . BS.unpack - toStringRep = BS.pack . Module.moduleNameString + fromStringRep = PackageName . mkFastStringByteString + toStringRep (PackageName s) = fastStringToByteString s instance Outputable InstalledPackageId where - ppr (InstalledPackageId str) = text str + ppr (InstalledPackageId str) = ftext str instance Outputable SourcePackageId where - ppr (SourcePackageId str) = text str + ppr (SourcePackageId str) = ftext str instance Outputable PackageName where - ppr (PackageName str) = text str + ppr (PackageName str) = ftext str defaultPackageConfig :: PackageConfig defaultPackageConfig = emptyInstalledPackageInfo installedPackageIdString :: PackageConfig -> String -installedPackageIdString pkg = str +installedPackageIdString pkg = unpackFS str where InstalledPackageId str = installedPackageId pkg sourcePackageIdString :: PackageConfig -> String -sourcePackageIdString pkg = str +sourcePackageIdString pkg = unpackFS str where SourcePackageId str = sourcePackageId pkg packageNameString :: PackageConfig -> String -packageNameString pkg = str +packageNameString pkg = unpackFS str where PackageName str = packageName pkg |