module Web.SocketIO.Types.String (
S.IsString(..)
, IsByteString(..)
, IsLazyByteString(..)
, IsText(..)
, IsLazyText(..)
, Serializable(..)
, Text
, StrictText
, ByteString
, LazyByteString
, (<>)
) where
import qualified Data.String as S
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TLE
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as BC
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Lazy.Char8 as BLC
import Data.Monoid ((<>), Monoid)
type Text = TL.Text
type StrictText = T.Text
type LazyByteString = BL.ByteString
class IsByteString a where
fromByteString :: ByteString -> a
instance IsByteString String where
fromByteString = BC.unpack
instance IsByteString T.Text where
fromByteString = TE.decodeUtf8
instance IsByteString TL.Text where
fromByteString = TLE.decodeUtf8 . BL.fromStrict
instance IsByteString ByteString where
fromByteString = id
instance IsByteString BL.ByteString where
fromByteString = BL.fromStrict
class IsLazyByteString a where
fromLazyByteString :: BL.ByteString -> a
instance IsLazyByteString String where
fromLazyByteString = BLC.unpack
instance IsLazyByteString T.Text where
fromLazyByteString = TE.decodeUtf8 . BL.toStrict
instance IsLazyByteString TL.Text where
fromLazyByteString = TLE.decodeUtf8
instance IsLazyByteString ByteString where
fromLazyByteString = BL.toStrict
instance IsLazyByteString BL.ByteString where
fromLazyByteString = id
class IsText a where
fromText :: T.Text -> a
instance IsText String where
fromText = T.unpack
instance IsText T.Text where
fromText = id
instance IsText TL.Text where
fromText = TL.fromStrict
instance IsText ByteString where
fromText = TE.encodeUtf8
instance IsText BL.ByteString where
fromText = TLE.encodeUtf8 . TL.fromStrict
class IsLazyText a where
fromLazyText :: TL.Text -> a
instance IsLazyText String where
fromLazyText = TL.unpack
instance IsLazyText T.Text where
fromLazyText = TL.toStrict
instance IsLazyText TL.Text where
fromLazyText = id
instance IsLazyText ByteString where
fromLazyText = TE.encodeUtf8 . TL.toStrict
instance IsLazyText BL.ByteString where
fromLazyText = TLE.encodeUtf8
class Serializable a where
serialize :: ( Monoid s
, S.IsString s
, IsText s
, IsLazyText s
, IsByteString s
, IsLazyByteString s
, Show a) => a -> s
serialize = S.fromString . show
instance Serializable T.Text where
serialize = fromText
instance Serializable TL.Text where
serialize = fromLazyText
instance Serializable ByteString where
serialize = fromByteString
instance Serializable BL.ByteString where
serialize = fromLazyByteString
instance Serializable Bool
instance Serializable Char
instance Serializable Double
instance Serializable Float
instance Serializable Int
instance Serializable Integer
instance Serializable Ordering
instance Serializable ()
instance Serializable a => Serializable [a]
instance Serializable a => Serializable (Maybe a)
instance (Serializable a, Serializable b) => Serializable (Either a b)
instance (Serializable a, Serializable b, Serializable c) => Serializable (a, b, c)
instance (Serializable a, Serializable b, Serializable c, Serializable d) => Serializable (a, b, c, d)
instance (Serializable a, Serializable b, Serializable c, Serializable d, Serializable e) => Serializable (a, b, c, d, e)