{-# language MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}
-- | 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.
module Data.String.Conversions where
import Data.Monoid
import Control.Applicative
-- 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
import qualified Data.Text.Lazy
import qualified Data.Text.Lazy.Encoding
-- * class and conversions
class ConvertibleStrings a b where
convertString :: a -> b
cs :: ConvertibleStrings a b => a -> b
cs = convertString
-- * 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 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 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.decodeUtf8
instance ConvertibleStrings StrictByteString LazyText where
convertString =
Data.Text.Lazy.Encoding.decodeUtf8 . Data.ByteString.Lazy.fromChunks . pure
-- from LazyByteString
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.decodeUtf8 . mconcat . Data.ByteString.Lazy.toChunks
instance ConvertibleStrings LazyByteString LazyText where
convertString = Data.Text.Lazy.Encoding.decodeUtf8
-- from StrictText
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 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