{-# LANGUAGE TypeFamilies #-} module Data.Text.Encoding.Lens where import Data.Text.Lens import Control.Lens.Iso import qualified Data.ByteString as S import qualified Data.Text as S import qualified Data.Text.Encoding as S import qualified Data.ByteString.Lazy as L import qualified Data.Text.Lazy as L import qualified Data.Text.Lazy.Encoding as L class Encodable t where type Encoded t utf8 :: Iso' t (Encoded t) utf16LE :: Iso' t (Encoded t) utf16BE :: Iso' t (Encoded t) utf32LE :: Iso' t (Encoded t) utf32BE :: Iso' t (Encoded t) instance Encodable S.Text where type Encoded S.Text = S.ByteString utf8 = iso S.encodeUtf8 S.decodeUtf8 {-# INLINE utf8 #-} utf16LE = iso S.encodeUtf16LE S.decodeUtf16LE {-# INLINE utf16LE #-} utf16BE = iso S.encodeUtf16BE S.decodeUtf16BE {-# INLINE utf16BE #-} utf32LE = iso S.encodeUtf32LE S.decodeUtf32LE {-# INLINE utf32LE #-} utf32BE = iso S.encodeUtf32BE S.decodeUtf32BE {-# INLINE utf32BE #-} instance Encodable L.Text where type Encoded L.Text = L.ByteString utf8 = iso L.encodeUtf8 L.decodeUtf8 {-# INLINE utf8 #-} utf16LE = iso L.encodeUtf16LE L.decodeUtf16LE {-# INLINE utf16LE #-} utf16BE = iso L.encodeUtf16BE L.decodeUtf16BE {-# INLINE utf16BE #-} utf32LE = iso L.encodeUtf32LE L.decodeUtf32LE {-# INLINE utf32LE #-} utf32BE = iso L.encodeUtf32BE L.decodeUtf32BE {-# INLINE utf32BE #-}