string-conversions-0.4.0.1/src/0000755000000000000000000000000012706330406014504 5ustar0000000000000000string-conversions-0.4.0.1/src/Data/0000755000000000000000000000000012706327530015361 5ustar0000000000000000string-conversions-0.4.0.1/src/Data/String/0000755000000000000000000000000012712532314016622 5ustar0000000000000000string-conversions-0.4.0.1/src/Data/String/Conversions/0000755000000000000000000000000012706327531021140 5ustar0000000000000000string-conversions-0.4.0.1/test/0000755000000000000000000000000012706330732014676 5ustar0000000000000000string-conversions-0.4.0.1/test/Data/0000755000000000000000000000000012706330732015547 5ustar0000000000000000string-conversions-0.4.0.1/test/Data/String/0000755000000000000000000000000013031357070017011 5ustar0000000000000000string-conversions-0.4.0.1/src/Data/String/Conversions.hs0000644000000000000000000001155412712532314021474 0ustar0000000000000000{-# 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 string-conversions-0.4.0.1/src/Data/String/Conversions/Monomorphic.hs0000644000000000000000000000441312706327531023770 0ustar0000000000000000{-# 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-0.4.0.1/test/Spec.hs0000644000000000000000000000005412706330554016125 0ustar0000000000000000{-# OPTIONS_GHC -F -pgmF hspec-discover #-} string-conversions-0.4.0.1/test/Data/String/ConversionsSpec.hs0000644000000000000000000000112713031357070022471 0ustar0000000000000000module 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 ()) string-conversions-0.4.0.1/src/Data/String/Conversions.hs0000644000000000000000000001155412712532314021474 0ustar0000000000000000{-# 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 string-conversions-0.4.0.1/src/Data/String/Conversions/Monomorphic.hs0000644000000000000000000000441312706327531023770 0ustar0000000000000000{-# 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-0.4.0.1/LICENSE0000644000000000000000000000276012530511752014727 0ustar0000000000000000Copyright (c) 2012, Sönke Hahn All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sönke Hahn nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. string-conversions-0.4.0.1/Setup.hs0000644000000000000000000000005612530511752015352 0ustar0000000000000000import Distribution.Simple main = defaultMain string-conversions-0.4.0.1/string-conversions.cabal0000644000000000000000000000312113031361143020544 0ustar0000000000000000-- 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.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. 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 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.10 source-repository head type: git location: https://github.com/soenkehahn/string-conversions library hs-source-dirs: src default-language: Haskell2010 build-depends: base == 4.*, bytestring >= 0.9, text >= 0.11, utf8-string >= 0.3 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