summaryrefslogtreecommitdiff
path: root/compiler/main/PackageConfig.hs
diff options
context:
space:
mode:
authorDuncan Coutts <duncan@well-typed.com>2014-08-24 21:59:03 +0100
committerEdward Z. Yang <ezyang@cs.stanford.edu>2014-08-29 12:39:05 +0100
commitc72efd7cee77d5f934bbede4ddf680ea348467db (patch)
tree47eceffbcb76ca82bc67bf0da8da226f9aa820b0 /compiler/main/PackageConfig.hs
parent1bc2a55542c487ff97455da5f39597bc25bbfa49 (diff)
downloadhaskell-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.hs44
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