{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE ConstraintKinds #-}
module Data.Convert.Instances.Text where
import Prelude
import Data.Convert.Class
import Data.Default
import qualified Data.Text as TS
import qualified Data.Text.Encoding as TE
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TLB
import qualified Data.Text.Lazy.Encoding as TLE
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Builder as BB
import Data.Word (Word8)
import Data.Foldable
import Data.Convert.Instances.ByteString ()
type ToLazyText a = Convertible a TL.Text
type ToText a = Convertible a TS.Text
type FromLazyText a = Convertible TL.Text a
type FromText a = Convertible TS.Text a
type IsText a = BiConvertible TS.Text a
type IsLazyText a = BiConvertible TL.Text a
toText :: ToText a => a -> TS.Text
fromText :: FromText a => TS.Text -> a
toText = convert ; {-# INLINE toText #-}
fromText = convert ; {-# INLINE fromText #-}
toLazyText :: ToLazyText a => a -> TL.Text
fromLazyText :: FromLazyText a => TL.Text -> a
toLazyText = convert ; {-# INLINE toLazyText #-}
fromLazyText = convert ; {-# INLINE fromLazyText #-}
instance Default TS.Text where def = convert "" ; {-# INLINE def #-}
instance Default TL.Text where def = convert "" ; {-# INLINE def #-}
instance Default TLB.Builder where def = convert "" ; {-# INLINE def #-}
instance Convertible TS.Text String where convert = TS.unpack ; {-# INLINE convert #-}
instance Convertible TS.Text TL.Text where convert = TL.fromStrict ; {-# INLINE convert #-}
instance Convertible TS.Text TLB.Builder where convert = TLB.fromText ; {-# INLINE convert #-}
instance Convertible TS.Text BS.ByteString where convert = TE.encodeUtf8 ; {-# INLINE convert #-}
instance Convertible TS.Text BL.ByteString where convert = BL.fromStrict . TE.encodeUtf8 ; {-# INLINE convert #-}
instance Convertible TS.Text BB.Builder where convert = TE.encodeUtf8Builder ; {-# INLINE convert #-}
instance Convertible TL.Text String where convert = TL.unpack ; {-# INLINE convert #-}
instance Convertible TL.Text TS.Text where convert = TL.toStrict ; {-# INLINE convert #-}
instance Convertible TL.Text TLB.Builder where convert = TLB.fromLazyText ; {-# INLINE convert #-}
instance Convertible TL.Text BS.ByteString where convert = convert . TLE.encodeUtf8 ; {-# INLINE convert #-}
instance Convertible TL.Text BL.ByteString where convert = TLE.encodeUtf8 ; {-# INLINE convert #-}
instance Convertible TL.Text BB.Builder where convert = TLE.encodeUtf8Builder ; {-# INLINE convert #-}
instance Convertible TLB.Builder String where convert = convert . TLB.toLazyText ; {-# INLINE convert #-}
instance Convertible TLB.Builder TS.Text where convert = convert . TLB.toLazyText ; {-# INLINE convert #-}
instance Convertible TLB.Builder TL.Text where convert = TLB.toLazyText ; {-# INLINE convert #-}
instance Convertible TLB.Builder BS.ByteString where convert = convert . TLB.toLazyText ; {-# INLINE convert #-}
instance Convertible TLB.Builder BL.ByteString where convert = convert . TLB.toLazyText ; {-# INLINE convert #-}
instance Convertible TLB.Builder BB.Builder where convert = convert . TLB.toLazyText ; {-# INLINE convert #-}
instance Convertible BS.ByteString [Word8] where convert = BS.unpack ; {-# INLINE convert #-}
instance Convertible BS.ByteString TS.Text where convert = TE.decodeUtf8 ; {-# INLINE convert #-}
instance Convertible BS.ByteString TL.Text where convert = TL.fromStrict . convert ; {-# INLINE convert #-}
instance Convertible BS.ByteString TLB.Builder where convert = TLB.fromText . convert ; {-# INLINE convert #-}
instance Convertible BS.ByteString BB.Builder where convert = BB.byteString ; {-# INLINE convert #-}
instance Convertible BL.ByteString [Word8] where convert = BL.unpack ; {-# INLINE convert #-}
instance Convertible BL.ByteString TS.Text where convert = TL.toStrict . convert ; {-# INLINE convert #-}
instance Convertible BL.ByteString TL.Text where convert = TLE.decodeUtf8 ; {-# INLINE convert #-}
instance Convertible BL.ByteString TLB.Builder where convert = TLB.fromLazyText . convert ; {-# INLINE convert #-}
instance Convertible BL.ByteString BB.Builder where convert = BB.lazyByteString ; {-# INLINE convert #-}
instance Convertible String TS.Text where convert = TS.pack ; {-# INLINE convert #-}
instance Convertible String TL.Text where convert = TL.pack ; {-# INLINE convert #-}
instance Convertible String TLB.Builder where convert = TLB.fromString ; {-# INLINE convert #-}
instance Convertible [Word8] BS.ByteString where convert = BS.pack ; {-# INLINE convert #-}
instance Convertible [Word8] BL.ByteString where convert = BL.pack ; {-# INLINE convert #-}
instance Convertible [Word8] BB.Builder where convert = foldMap BB.word8 ; {-# INLINE convert #-}
instance Convertible Char TS.Text where convert = TS.singleton ; {-# INLINE convert #-}
instance Convertible Char TL.Text where convert = TL.singleton ; {-# INLINE convert #-}
instance Convertible Char TLB.Builder where convert = TLB.singleton ; {-# INLINE convert #-}
instance Convertible Word8 BS.ByteString where convert = BS.singleton ; {-# INLINE convert #-}
instance Convertible Word8 BL.ByteString where convert = BL.singleton ; {-# INLINE convert #-}
instance Convertible Word8 BB.Builder where convert = BB.word8 ; {-# INLINE convert #-}