{-# LANGUAGE TypeSynonymInstances #-}
---------------------------------------------------------
--
-- Module : Data.ByteString.Class
-- Copyright : Michael Snoyman
-- License : BSD3
--
-- Maintainer : Michael Snoyman <michael@snoyman.com>
-- Stability : Stable
-- Portability : portable
--
-- Classes for automatic conversion to and from strict and lazy bytestrings.
--
-- Please note: the instance for 'String' uses UTF-8 encoding.
--
---------------------------------------------------------
module Data.ByteString.Class
( StrictByteString (..)
, LazyByteString (..)
) where
import qualified Data.ByteString as S
import qualified Data.ByteString.UTF8 as SU
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.UTF8 as LU
class StrictByteString a where
toStrictByteString :: a -> S.ByteString
fromStrictByteString :: S.ByteString -> a
instance StrictByteString S.ByteString where
toStrictByteString = id
fromStrictByteString = id
instance StrictByteString L.ByteString where
toStrictByteString = S.concat . L.toChunks
fromStrictByteString = L.fromChunks . return
instance StrictByteString String where
toStrictByteString = SU.fromString
fromStrictByteString = SU.toString
class LazyByteString a where
toLazyByteString :: a -> L.ByteString
fromLazyByteString :: L.ByteString -> a
instance LazyByteString L.ByteString where
toLazyByteString = id
fromLazyByteString = id
instance LazyByteString S.ByteString where
toLazyByteString = fromStrictByteString
fromLazyByteString = toStrictByteString
instance LazyByteString String where
toLazyByteString = LU.fromString
fromLazyByteString = LU.toString