{-# LANGUAGE CPP #-}
-- |
-- This module exports orphan 'Conversion' instances for the types
-- of the \"text\" library.
-- 
-- It is meant to be used in combination with
-- the <http://hackage.haskell.org/package/conversion "conversion">
-- library. E.g.:
-- 
-- >import Conversion
-- >import Conversion.Text
-- 
-- This module exports the following instances:
-- 
-- * @instance Alternative f => Conversion Data.ByteString.Builder.Builder (f Data.Text.Lazy.Builder)@
-- * @instance Alternative f => Conversion Data.ByteString.Builder.Builder (f Data.Text.Lazy.Text)@
-- * @instance Alternative f => Conversion Data.ByteString.Builder.Builder (f Data.Text.Text)@
-- * @instance Alternative f => Conversion Data.ByteString.ByteString (f Data.Text.Lazy.Builder)@
-- * @instance Alternative f => Conversion Data.ByteString.ByteString (f Data.Text.Lazy.Text)@
-- * @instance Alternative f => Conversion Data.ByteString.ByteString (f Data.Text.Text)@
-- * @instance Alternative f => Conversion Data.ByteString.Lazy.ByteString (f Data.Text.Lazy.Builder)@
-- * @instance Alternative f => Conversion Data.ByteString.Lazy.ByteString (f Data.Text.Lazy.Text)@
-- * @instance Alternative f => Conversion Data.ByteString.Lazy.ByteString (f Data.Text.Text)@
-- * @instance Conversion Char Data.Text.Lazy.Builder@
-- * @instance Conversion Char Data.Text.Lazy.Text@
-- * @instance Conversion Char Data.Text.Text@
-- * @instance Conversion Data.ByteString.ByteString (Either Data.Text.Encoding.Error.UnicodeException Data.Text.Lazy.Text)@
-- * @instance Conversion Data.ByteString.ByteString (Either Data.Text.Encoding.Error.UnicodeException Data.Text.Text)@
-- * @instance Conversion Data.ByteString.Lazy.ByteString (Either Data.Text.Encoding.Error.UnicodeException Data.Text.Lazy.Text)@
-- * @instance Conversion Data.ByteString.Lazy.ByteString (Either Data.Text.Encoding.Error.UnicodeException Data.Text.Text)@
-- * @instance Conversion Data.Text.Lazy.Builder Data.ByteString.Builder.Builder@
-- * @instance Conversion Data.Text.Lazy.Builder Data.ByteString.ByteString@
-- * @instance Conversion Data.Text.Lazy.Builder Data.ByteString.Lazy.ByteString@
-- * @instance Conversion Data.Text.Lazy.Builder Data.Text.Lazy.Text@
-- * @instance Conversion Data.Text.Lazy.Builder Data.Text.Text@
-- * @instance Conversion Data.Text.Lazy.Builder String@
-- * @instance Conversion Data.Text.Lazy.Text Data.ByteString.Builder.Builder@
-- * @instance Conversion Data.Text.Lazy.Text Data.ByteString.ByteString@
-- * @instance Conversion Data.Text.Lazy.Text Data.ByteString.Lazy.ByteString@
-- * @instance Conversion Data.Text.Lazy.Text Data.Text.Lazy.Builder@
-- * @instance Conversion Data.Text.Lazy.Text Data.Text.Text@
-- * @instance Conversion Data.Text.Lazy.Text String@
-- * @instance Conversion Data.Text.Text Data.ByteString.Builder.Builder@
-- * @instance Conversion Data.Text.Text Data.ByteString.ByteString@
-- * @instance Conversion Data.Text.Text Data.ByteString.Lazy.ByteString@
-- * @instance Conversion Data.Text.Text Data.Text.Lazy.Builder@
-- * @instance Conversion Data.Text.Text Data.Text.Lazy.Text@
-- * @instance Conversion Data.Text.Text String@
-- * @instance Conversion String Data.Text.Lazy.Builder@
-- * @instance Conversion String Data.Text.Lazy.Text@
-- * @instance Conversion String Data.Text.Text@
module Conversion.Text () where

import BasePrelude
import Conversion
import Conversion.ByteString
import qualified Data.Text as TS
import qualified Data.Text.Encoding as TE
import qualified Data.Text.Encoding.Error as TEE
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


instance Conversion TS.Text String where
  {-# INLINE convert #-}
  convert :: Text -> String
convert = Text -> String
TS.unpack

instance Conversion TS.Text TL.Text where
  {-# INLINE convert #-}
  convert :: Text -> Text
convert = Text -> Text
TL.fromStrict

instance Conversion TS.Text TLB.Builder where
  {-# INLINE convert #-}
  convert :: Text -> Builder
convert = Text -> Builder
TLB.fromText

instance Conversion TS.Text BS.ByteString where
  {-# INLINE convert #-}
  convert :: Text -> ByteString
convert = Text -> ByteString
TE.encodeUtf8

instance Conversion TS.Text BL.ByteString where
  {-# INLINE convert #-}
  convert :: Text -> ByteString
convert = ByteString -> ByteString
BL.fromStrict (ByteString -> ByteString)
-> (Text -> ByteString) -> Text -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ByteString
TE.encodeUtf8

instance Conversion TS.Text BB.Builder where
  {-# INLINE convert #-}
#if MIN_VERSION_text(1,2,0)
  convert :: Text -> Builder
convert = Text -> Builder
TE.encodeUtf8Builder
#else
  convert = convert . TE.encodeUtf8
#endif


instance Conversion TL.Text String where
  {-# INLINE convert #-}
  convert :: Text -> String
convert = Text -> String
TL.unpack

instance Conversion TL.Text TS.Text where
  {-# INLINE convert #-}
  convert :: Text -> Text
convert = Text -> Text
TL.toStrict

instance Conversion TL.Text TLB.Builder where
  {-# INLINE convert #-}
  convert :: Text -> Builder
convert = Text -> Builder
TLB.fromLazyText

instance Conversion TL.Text BS.ByteString where
  {-# INLINE convert #-}
  convert :: Text -> ByteString
convert = ByteString -> ByteString
forall a b. Conversion a b => a -> b
convert (ByteString -> ByteString)
-> (Text -> ByteString) -> Text -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ByteString
TLE.encodeUtf8

instance Conversion TL.Text BL.ByteString where
  {-# INLINE convert #-}
  convert :: Text -> ByteString
convert = Text -> ByteString
TLE.encodeUtf8

instance Conversion TL.Text BB.Builder where
  {-# INLINE convert #-}
#if MIN_VERSION_text(1,2,0)
  convert :: Text -> Builder
convert = Text -> Builder
TLE.encodeUtf8Builder
#else
  convert = convert . TLE.encodeUtf8
#endif


instance Conversion TLB.Builder String where
  {-# INLINE convert #-}
  convert :: Builder -> String
convert = Text -> String
forall a b. Conversion a b => a -> b
convert (Text -> String) -> (Builder -> Text) -> Builder -> String
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
TLB.toLazyText

instance Conversion TLB.Builder TS.Text where
  {-# INLINE convert #-}
  convert :: Builder -> Text
convert = Text -> Text
forall a b. Conversion a b => a -> b
convert (Text -> Text) -> (Builder -> Text) -> Builder -> Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
TLB.toLazyText

instance Conversion TLB.Builder TL.Text where
  {-# INLINE convert #-}
  convert :: Builder -> Text
convert = Builder -> Text
TLB.toLazyText

instance Conversion TLB.Builder BS.ByteString where
  {-# INLINE convert #-}
  convert :: Builder -> ByteString
convert = Text -> ByteString
forall a b. Conversion a b => a -> b
convert (Text -> ByteString) -> (Builder -> Text) -> Builder -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
TLB.toLazyText

instance Conversion TLB.Builder BL.ByteString where
  {-# INLINE convert #-}
  convert :: Builder -> ByteString
convert = Text -> ByteString
forall a b. Conversion a b => a -> b
convert (Text -> ByteString) -> (Builder -> Text) -> Builder -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
TLB.toLazyText

instance Conversion TLB.Builder BB.Builder where
  {-# INLINE convert #-}
  convert :: Builder -> Builder
convert = Text -> Builder
forall a b. Conversion a b => a -> b
convert (Text -> Builder) -> (Builder -> Text) -> Builder -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
TLB.toLazyText


instance Conversion BS.ByteString (Either TEE.UnicodeException TS.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> Either UnicodeException Text
convert = ByteString -> Either UnicodeException Text
TE.decodeUtf8'

instance Conversion BS.ByteString (Either TEE.UnicodeException TL.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> Either UnicodeException Text
convert = ByteString -> Either UnicodeException Text
TLE.decodeUtf8' (ByteString -> Either UnicodeException Text)
-> (ByteString -> ByteString)
-> ByteString
-> Either UnicodeException Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> ByteString
forall a b. Conversion a b => a -> b
convert

instance Alternative f => Conversion BS.ByteString (f TS.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> f Text
convert = Either UnicodeException Text -> f Text
forall a b. Conversion a b => a -> b
convert (Either UnicodeException Text -> f Text)
-> (ByteString -> Either UnicodeException Text)
-> ByteString
-> f Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> Either UnicodeException Text
TE.decodeUtf8'

instance Alternative f => Conversion BS.ByteString (f TL.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> f Text
convert = Either UnicodeException Text -> f Text
forall a b. Conversion a b => a -> b
convert (Either UnicodeException Text -> f Text)
-> (ByteString -> Either UnicodeException Text)
-> ByteString
-> f Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> Either UnicodeException Text
TLE.decodeUtf8' (ByteString -> Either UnicodeException Text)
-> (ByteString -> ByteString)
-> ByteString
-> Either UnicodeException Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> ByteString
forall a b. Conversion a b => a -> b
convert

instance Alternative f => Conversion BS.ByteString (f TLB.Builder) where
  {-# INLINE convert #-}
  convert :: ByteString -> f Builder
convert = (Text -> Builder) -> f Text -> f Builder
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Builder
TLB.fromLazyText (f Text -> f Builder)
-> (ByteString -> f Text) -> ByteString -> f Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> f Text
forall a b. Conversion a b => a -> b
convert


instance Conversion BL.ByteString (Either TEE.UnicodeException TS.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> Either UnicodeException Text
convert = (Text -> Text)
-> Either UnicodeException Text -> Either UnicodeException Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Text
forall a b. Conversion a b => a -> b
convert (Either UnicodeException Text -> Either UnicodeException Text)
-> (ByteString -> Either UnicodeException Text)
-> ByteString
-> Either UnicodeException Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> Either UnicodeException Text
TLE.decodeUtf8'

instance Conversion BL.ByteString (Either TEE.UnicodeException TL.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> Either UnicodeException Text
convert = ByteString -> Either UnicodeException Text
TLE.decodeUtf8'

instance Alternative f => Conversion BL.ByteString (f TS.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> f Text
convert = Either UnicodeException Text -> f Text
forall a b. Conversion a b => a -> b
convert (Either UnicodeException Text -> f Text)
-> (ByteString -> Either UnicodeException Text)
-> ByteString
-> f Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Text -> Text)
-> Either UnicodeException Text -> Either UnicodeException Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Text
TL.toStrict (Either UnicodeException Text -> Either UnicodeException Text)
-> (ByteString -> Either UnicodeException Text)
-> ByteString
-> Either UnicodeException Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> Either UnicodeException Text
TLE.decodeUtf8'

instance Alternative f => Conversion BL.ByteString (f TL.Text) where
  {-# INLINE convert #-}
  convert :: ByteString -> f Text
convert = Either UnicodeException Text -> f Text
forall a b. Conversion a b => a -> b
convert (Either UnicodeException Text -> f Text)
-> (ByteString -> Either UnicodeException Text)
-> ByteString
-> f Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> Either UnicodeException Text
TLE.decodeUtf8'

instance Alternative f => Conversion BL.ByteString (f TLB.Builder) where
  {-# INLINE convert #-}
  convert :: ByteString -> f Builder
convert = (Text -> Builder) -> f Text -> f Builder
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Builder
TLB.fromLazyText (f Text -> f Builder)
-> (ByteString -> f Text) -> ByteString -> f Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> f Text
forall a b. Conversion a b => a -> b
convert


instance Alternative f => Conversion BB.Builder (f TS.Text) where
  {-# INLINE convert #-}
  convert :: Builder -> f Text
convert = ByteString -> f Text
forall a b. Conversion a b => a -> b
convert (ByteString -> f Text)
-> (Builder -> ByteString) -> Builder -> f Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> ByteString
BB.toLazyByteString

instance Alternative f => Conversion BB.Builder (f TL.Text) where
  {-# INLINE convert #-}
  convert :: Builder -> f Text
convert = ByteString -> f Text
forall a b. Conversion a b => a -> b
convert (ByteString -> f Text)
-> (Builder -> ByteString) -> Builder -> f Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> ByteString
BB.toLazyByteString

instance Alternative f => Conversion BB.Builder (f TLB.Builder) where
  {-# INLINE convert #-}
  convert :: Builder -> f Builder
convert = ByteString -> f Builder
forall a b. Conversion a b => a -> b
convert (ByteString -> f Builder)
-> (Builder -> ByteString) -> Builder -> f Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> ByteString
BB.toLazyByteString


instance Conversion String TS.Text where
  {-# INLINE convert #-}
  convert :: String -> Text
convert = String -> Text
TS.pack

instance Conversion String TL.Text where
  {-# INLINE convert #-}
  convert :: String -> Text
convert = String -> Text
TL.pack

instance Conversion String TLB.Builder where
  {-# INLINE convert #-}
  convert :: String -> Builder
convert = String -> Builder
TLB.fromString


instance Conversion Char TS.Text where
  {-# INLINE convert #-}
  convert :: Char -> Text
convert = Char -> Text
TS.singleton

instance Conversion Char TL.Text where
  {-# INLINE convert #-}
  convert :: Char -> Text
convert = Char -> Text
TL.singleton

instance Conversion Char TLB.Builder where
  {-# INLINE convert #-}
  convert :: Char -> Builder
convert = Char -> Builder
TLB.singleton