string-conversions 0.4 → 0.4.0.1
raw patch · 7 files changed
+340/−294 lines, 7 filesdep +QuickCheckdep +deepseqdep +hspecdep ~base
Dependencies added: QuickCheck, deepseq, hspec, quickcheck-instances
Dependency ranges changed: base
Files
- Data/String/Conversions.hs +0/−184
- Data/String/Conversions/Monomorphic.hs +0/−95
- src/Data/String/Conversions.hs +184/−0
- src/Data/String/Conversions/Monomorphic.hs +95/−0
- string-conversions.cabal +40/−15
- test/Data/String/ConversionsSpec.hs +20/−0
- test/Spec.hs +1/−0
− Data/String/Conversions.hs
@@ -1,184 +0,0 @@-{-# language MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances, CPP #-}---- | A type class for converting strings.--- Supported types are:------ * 'String'------ * strict 'Data.ByteString.ByteString'------ * lazy 'Data.ByteString.Lazy.ByteString'------ * strict 'Data.Text.Text'------ * lazy 'Data.Text.Lazy.Text'------ Assumes UTF-8 encoding for both types of ByteStrings.--module Data.String.Conversions (- -- * class and conversions- ConvertibleStrings(..),- cs,-- -- * type synonyms- StrictByteString,- SBS,- LazyByteString,- LBS,- StrictText,- ST,- LazyText,- LT,-- -- | Generic string concatenation (with ghc >= 7.4 this is a re-export from Data.Monoid- -- to avoid clashes.)- (<>),- ) where---import Data.Monoid--#if !MIN_VERSION_base(4,8,0)-import Control.Applicative-#endif---- string imports--import qualified Data.ByteString-import qualified Data.ByteString.UTF8--import qualified Data.ByteString.Lazy-import qualified Data.ByteString.Lazy.UTF8--import qualified Data.Text-import qualified Data.Text.Encoding hiding (decodeUtf8)-import qualified Data.Text.Encoding.Error--import qualified Data.Text.Lazy-import qualified Data.Text.Lazy.Encoding hiding (decodeUtf8)----- * class and conversions--class ConvertibleStrings a b where- convertString :: a -> b--cs :: ConvertibleStrings a b => a -> b-cs = convertString--#if !MIN_VERSION_base(4,5,0)-(<>) :: Monoid s => s -> s -> s-(<>) = mappend-#endif---- * type synonyms--type StrictByteString = Data.ByteString.ByteString-type SBS = Data.ByteString.ByteString--type LazyByteString = Data.ByteString.Lazy.ByteString-type LBS = Data.ByteString.Lazy.ByteString--type StrictText = Data.Text.Text-type ST = Data.Text.Text--type LazyText = Data.Text.Lazy.Text-type LT = Data.Text.Lazy.Text----- instances--- ------------- from String--instance ConvertibleStrings String String where- convertString = id--instance ConvertibleStrings String StrictByteString where- convertString = Data.ByteString.UTF8.fromString--instance ConvertibleStrings String LazyByteString where- convertString = Data.ByteString.Lazy.UTF8.fromString--instance ConvertibleStrings String StrictText where- convertString = Data.Text.pack--instance ConvertibleStrings String LazyText where- convertString = Data.Text.Lazy.pack----- from StrictByteString--instance ConvertibleStrings StrictByteString StrictByteString where- convertString = id--instance ConvertibleStrings StrictByteString String where- convertString = Data.ByteString.UTF8.toString--instance ConvertibleStrings StrictByteString LazyByteString where- convertString = Data.ByteString.Lazy.fromChunks . pure--instance ConvertibleStrings StrictByteString StrictText where- convertString = Data.Text.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode--instance ConvertibleStrings StrictByteString LazyText where- convertString =- Data.Text.Lazy.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode .- Data.ByteString.Lazy.fromChunks . pure----- from LazyByteString--instance ConvertibleStrings LazyByteString LazyByteString where- convertString = id--instance ConvertibleStrings LazyByteString String where- convertString = Data.ByteString.Lazy.UTF8.toString--instance ConvertibleStrings LazyByteString StrictByteString where- convertString = mconcat . Data.ByteString.Lazy.toChunks--instance ConvertibleStrings LazyByteString StrictText where- convertString =- Data.Text.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode .- mconcat . Data.ByteString.Lazy.toChunks--instance ConvertibleStrings LazyByteString LazyText where- convertString = Data.Text.Lazy.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode----- from StrictText--instance ConvertibleStrings StrictText StrictText where- convertString = id--instance ConvertibleStrings StrictText String where- convertString = Data.Text.unpack--instance ConvertibleStrings StrictText StrictByteString where- convertString = Data.Text.Encoding.encodeUtf8--instance ConvertibleStrings StrictText LazyByteString where- convertString = Data.ByteString.Lazy.fromChunks . pure . Data.Text.Encoding.encodeUtf8--instance ConvertibleStrings StrictText LazyText where- convertString = Data.Text.Lazy.fromChunks . pure----- from LazyText--instance ConvertibleStrings LazyText LazyText where- convertString = id--instance ConvertibleStrings LazyText String where- convertString = Data.Text.Lazy.unpack--instance ConvertibleStrings LazyText StrictByteString where- convertString =- mconcat . Data.ByteString.Lazy.toChunks . Data.Text.Lazy.Encoding.encodeUtf8--instance ConvertibleStrings LazyText LazyByteString where- convertString = Data.Text.Lazy.Encoding.encodeUtf8--instance ConvertibleStrings LazyText StrictText where- convertString = mconcat . Data.Text.Lazy.toChunks
− Data/String/Conversions/Monomorphic.hs
@@ -1,95 +0,0 @@-{-# LANGUAGE FlexibleContexts #-}---- | Monomorphic conversion functions that are useful when you wish to--- be explicit about the conversion without writing a type signature--- or when 'Data.String.Conversions.cs' is ambiguous due to--- polymorphic inputs or outputs.------ All functions in this module have 'Data.String.Conversions.cs' as--- their implementation.-module Data.String.Conversions.Monomorphic (- -- * From a polymorphic input to a monomorphic output- toString,- toStrictByteString,- toSBS,- toLazyByteString,- toLBS,- toStrictText,- toST,- toLazyText,- toLT,-- -- * From a monomorphic input to a polymorphic output-- fromString,- fromStrictByteString,- fromSBS,- fromLazyByteString,- fromLBS,- fromStrictText,- fromST,- fromLazyText,- fromLT- ) where--import Prelude (String)--import Data.String.Conversions---- to a monomorphic type--toString :: ConvertibleStrings a String => a -> String-toString = cs--toStrictByteString :: ConvertibleStrings a StrictByteString => a -> StrictByteString-toStrictByteString = cs--toSBS :: ConvertibleStrings a SBS => a -> SBS-toSBS = cs--toLazyByteString :: ConvertibleStrings a LazyByteString => a -> LazyByteString-toLazyByteString = cs--toLBS :: ConvertibleStrings a LBS => a -> LBS-toLBS = cs--toStrictText :: ConvertibleStrings a StrictText => a -> StrictText-toStrictText = cs--toST :: ConvertibleStrings a ST => a -> ST-toST = cs--toLazyText :: ConvertibleStrings a LazyText => a -> LazyText-toLazyText = cs--toLT :: ConvertibleStrings a LT => a -> LT-toLT = cs---- from a monomorphic type--fromString :: ConvertibleStrings String a => String -> a-fromString = cs--fromStrictByteString :: ConvertibleStrings StrictByteString a => StrictByteString -> a-fromStrictByteString = cs--fromSBS :: ConvertibleStrings SBS a => SBS -> a-fromSBS = cs--fromLazyByteString :: ConvertibleStrings LazyByteString a => LazyByteString -> a-fromLazyByteString = cs--fromLBS :: ConvertibleStrings LBS a => LBS -> a-fromLBS = cs--fromStrictText :: ConvertibleStrings StrictText a => StrictText -> a-fromStrictText = cs--fromST :: ConvertibleStrings ST a => ST -> a-fromST = cs--fromLazyText :: ConvertibleStrings LazyText a => LazyText -> a-fromLazyText = cs--fromLT :: ConvertibleStrings LT a => LT -> a-fromLT = cs
+ src/Data/String/Conversions.hs view
@@ -0,0 +1,184 @@+{-# language MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances, CPP #-}++-- | A type class for converting strings.+-- Supported types are:+--+-- * 'String'+--+-- * strict 'Data.ByteString.ByteString'+--+-- * lazy 'Data.ByteString.Lazy.ByteString'+--+-- * strict 'Data.Text.Text'+--+-- * lazy 'Data.Text.Lazy.Text'+--+-- Assumes UTF-8 encoding for both types of ByteStrings.++module Data.String.Conversions (+ -- * class and conversions+ ConvertibleStrings(..),+ cs,++ -- * type synonyms+ StrictByteString,+ SBS,+ LazyByteString,+ LBS,+ StrictText,+ ST,+ LazyText,+ LT,++ -- | Generic string concatenation (with ghc >= 7.4 this is a re-export from Data.Monoid+ -- to avoid clashes.)+ (<>),+ ) where+++import Data.Monoid++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++-- string imports++import qualified Data.ByteString+import qualified Data.ByteString.UTF8++import qualified Data.ByteString.Lazy+import qualified Data.ByteString.Lazy.UTF8++import qualified Data.Text+import qualified Data.Text.Encoding hiding (decodeUtf8)+import qualified Data.Text.Encoding.Error++import qualified Data.Text.Lazy+import qualified Data.Text.Lazy.Encoding hiding (decodeUtf8)+++-- * class and conversions++class ConvertibleStrings a b where+ convertString :: a -> b++cs :: ConvertibleStrings a b => a -> b+cs = convertString++#if !MIN_VERSION_base(4,5,0)+(<>) :: Monoid s => s -> s -> s+(<>) = mappend+#endif++-- * type synonyms++type StrictByteString = Data.ByteString.ByteString+type SBS = Data.ByteString.ByteString++type LazyByteString = Data.ByteString.Lazy.ByteString+type LBS = Data.ByteString.Lazy.ByteString++type StrictText = Data.Text.Text+type ST = Data.Text.Text++type LazyText = Data.Text.Lazy.Text+type LT = Data.Text.Lazy.Text+++-- instances+-- ---------++-- from String++instance ConvertibleStrings String String where+ convertString = id++instance ConvertibleStrings String StrictByteString where+ convertString = Data.ByteString.UTF8.fromString++instance ConvertibleStrings String LazyByteString where+ convertString = Data.ByteString.Lazy.UTF8.fromString++instance ConvertibleStrings String StrictText where+ convertString = Data.Text.pack++instance ConvertibleStrings String LazyText where+ convertString = Data.Text.Lazy.pack+++-- from StrictByteString++instance ConvertibleStrings StrictByteString StrictByteString where+ convertString = id++instance ConvertibleStrings StrictByteString String where+ convertString = Data.ByteString.UTF8.toString++instance ConvertibleStrings StrictByteString LazyByteString where+ convertString = Data.ByteString.Lazy.fromChunks . pure++instance ConvertibleStrings StrictByteString StrictText where+ convertString = Data.Text.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode++instance ConvertibleStrings StrictByteString LazyText where+ convertString =+ Data.Text.Lazy.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode .+ Data.ByteString.Lazy.fromChunks . pure+++-- from LazyByteString++instance ConvertibleStrings LazyByteString LazyByteString where+ convertString = id++instance ConvertibleStrings LazyByteString String where+ convertString = Data.ByteString.Lazy.UTF8.toString++instance ConvertibleStrings LazyByteString StrictByteString where+ convertString = mconcat . Data.ByteString.Lazy.toChunks++instance ConvertibleStrings LazyByteString StrictText where+ convertString =+ Data.Text.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode .+ mconcat . Data.ByteString.Lazy.toChunks++instance ConvertibleStrings LazyByteString LazyText where+ convertString = Data.Text.Lazy.Encoding.decodeUtf8With Data.Text.Encoding.Error.lenientDecode+++-- from StrictText++instance ConvertibleStrings StrictText StrictText where+ convertString = id++instance ConvertibleStrings StrictText String where+ convertString = Data.Text.unpack++instance ConvertibleStrings StrictText StrictByteString where+ convertString = Data.Text.Encoding.encodeUtf8++instance ConvertibleStrings StrictText LazyByteString where+ convertString = Data.ByteString.Lazy.fromChunks . pure . Data.Text.Encoding.encodeUtf8++instance ConvertibleStrings StrictText LazyText where+ convertString = Data.Text.Lazy.fromChunks . pure+++-- from LazyText++instance ConvertibleStrings LazyText LazyText where+ convertString = id++instance ConvertibleStrings LazyText String where+ convertString = Data.Text.Lazy.unpack++instance ConvertibleStrings LazyText StrictByteString where+ convertString =+ mconcat . Data.ByteString.Lazy.toChunks . Data.Text.Lazy.Encoding.encodeUtf8++instance ConvertibleStrings LazyText LazyByteString where+ convertString = Data.Text.Lazy.Encoding.encodeUtf8++instance ConvertibleStrings LazyText StrictText where+ convertString = mconcat . Data.Text.Lazy.toChunks
+ src/Data/String/Conversions/Monomorphic.hs view
@@ -0,0 +1,95 @@+{-# LANGUAGE FlexibleContexts #-}++-- | Monomorphic conversion functions that are useful when you wish to+-- be explicit about the conversion without writing a type signature+-- or when 'Data.String.Conversions.cs' is ambiguous due to+-- polymorphic inputs or outputs.+--+-- All functions in this module have 'Data.String.Conversions.cs' as+-- their implementation.+module Data.String.Conversions.Monomorphic (+ -- * From a polymorphic input to a monomorphic output+ toString,+ toStrictByteString,+ toSBS,+ toLazyByteString,+ toLBS,+ toStrictText,+ toST,+ toLazyText,+ toLT,++ -- * From a monomorphic input to a polymorphic output++ fromString,+ fromStrictByteString,+ fromSBS,+ fromLazyByteString,+ fromLBS,+ fromStrictText,+ fromST,+ fromLazyText,+ fromLT+ ) where++import Prelude (String)++import Data.String.Conversions++-- to a monomorphic type++toString :: ConvertibleStrings a String => a -> String+toString = cs++toStrictByteString :: ConvertibleStrings a StrictByteString => a -> StrictByteString+toStrictByteString = cs++toSBS :: ConvertibleStrings a SBS => a -> SBS+toSBS = cs++toLazyByteString :: ConvertibleStrings a LazyByteString => a -> LazyByteString+toLazyByteString = cs++toLBS :: ConvertibleStrings a LBS => a -> LBS+toLBS = cs++toStrictText :: ConvertibleStrings a StrictText => a -> StrictText+toStrictText = cs++toST :: ConvertibleStrings a ST => a -> ST+toST = cs++toLazyText :: ConvertibleStrings a LazyText => a -> LazyText+toLazyText = cs++toLT :: ConvertibleStrings a LT => a -> LT+toLT = cs++-- from a monomorphic type++fromString :: ConvertibleStrings String a => String -> a+fromString = cs++fromStrictByteString :: ConvertibleStrings StrictByteString a => StrictByteString -> a+fromStrictByteString = cs++fromSBS :: ConvertibleStrings SBS a => SBS -> a+fromSBS = cs++fromLazyByteString :: ConvertibleStrings LazyByteString a => LazyByteString -> a+fromLazyByteString = cs++fromLBS :: ConvertibleStrings LBS a => LBS -> a+fromLBS = cs++fromStrictText :: ConvertibleStrings StrictText a => StrictText -> a+fromStrictText = cs++fromST :: ConvertibleStrings ST a => ST -> a+fromST = cs++fromLazyText :: ConvertibleStrings LazyText a => LazyText -> a+fromLazyText = cs++fromLT :: ConvertibleStrings LT a => LT -> a+fromLT = cs
string-conversions.cabal view
@@ -1,32 +1,57 @@--- Initial string-conversions.cabal generated by cabal init. For further--- documentation, see http://haskell.org/cabal/users-guide/+-- This file has been generated from package.yaml by hpack version 0.15.0.+--+-- see: https://github.com/sol/hpack name: string-conversions-version: 0.4+version: 0.4.0.1 synopsis: Simplifies dealing with different types for strings-description: Provides a simple type class for converting values- of different string types- into values of other string types.+description: Provides a simple type class for converting values of different string types into values of other string types. license: BSD3 license-file: LICENSE+tested-with: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.1, GHC == 8.0.1 author: Sönke Hahn maintainer: soenkehahn@gmail.com--- copyright: category: Data+homepage: https://github.com/soenkehahn/string-conversions#readme+bug-reports: https://github.com/soenkehahn/string-conversions/issues build-type: Simple-cabal-version: >=1.8+cabal-version: >= 1.10 source-repository head- type: git- location: https://github.com/soenkehahn/string-conversions.git+ type: git+ location: https://github.com/soenkehahn/string-conversions library- exposed-modules: Data.String.Conversions,- Data.String.Conversions.Monomorphic+ hs-source-dirs:+ src+ default-language: Haskell2010 build-depends:- base < 5,+ base == 4.*, bytestring >= 0.9, text >= 0.11, utf8-string >= 0.3- ghc-options:- -Wall+ exposed-modules:+ Data.String.Conversions+ Data.String.Conversions.Monomorphic+ ghc-options: -Wall++test-suite spec+ type: exitcode-stdio-1.0+ main-is: Spec.hs+ hs-source-dirs:+ test,+ src+ build-depends:+ base == 4.*,+ bytestring >= 0.9,+ text >= 0.11,+ utf8-string >= 0.3,+ hspec,+ quickcheck-instances,+ deepseq,+ QuickCheck+ other-modules:+ Data.String.ConversionsSpec+ Data.String.Conversions+ Data.String.Conversions.Monomorphic+ default-language: Haskell2010
+ test/Data/String/ConversionsSpec.hs view
@@ -0,0 +1,20 @@+module Data.String.ConversionsSpec where++import Control.DeepSeq+import Test.Hspec+import Test.QuickCheck+import Test.QuickCheck.Instances ()++import Data.String.Conversions++spec :: Spec+spec = do+ describe "cs" $ do+ it "allows to convert from String to strict Text" $ do+ property $ \ s ->+ show (s :: String) `shouldBe` show (cs s :: ST)++ context "when converting from strict ByteString to strict Text" $ do+ it "never crashes" $ do+ property $ \ s ->+ deepseq (cs (s :: SBS) :: ST) (return () :: IO ())
+ test/Spec.hs view
@@ -0,0 +1,1 @@+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}