Skip to content

Instantly share code, notes, and snippets.

@bergmark
Created April 22, 2014 18:44
Show Gist options
  • Save bergmark/11190017 to your computer and use it in GitHub Desktop.
Save bergmark/11190017 to your computer and use it in GitHub Desktop.
{-# LANGUAGE
FlexibleContexts
, FlexibleInstances
, MultiParamTypeClasses
, TypeSynonymInstances
#-}
module ToStringy (ToStringy (..), fromStringy) where
import Data.String
import qualified Data.ByteString as SB
import qualified Data.ByteString.Lazy as LB
import qualified Data.ByteString.Lazy.UTF8 as LBU
import qualified Data.ByteString.UTF8 as SBU
import qualified Data.Text as ST
import qualified Data.Text.Encoding as STE
import qualified Data.Text.Lazy as LT
import qualified Data.Text.Lazy.Encoding as LTE
class ToStringy a b where
toStringy :: a -> b
instance ToStringy LB.ByteString LT.Text where toStringy = LTE.decodeUtf8
instance ToStringy LB.ByteString SB.ByteString where toStringy = LB.toStrict
instance ToStringy LB.ByteString ST.Text where toStringy = LT.toStrict . LTE.decodeUtf8
instance ToStringy LB.ByteString String where toStringy = LBU.toString
instance ToStringy LT.Text LB.ByteString where toStringy = LTE.encodeUtf8
instance ToStringy LT.Text SB.ByteString where toStringy = LB.toStrict . LTE.encodeUtf8
instance ToStringy LT.Text ST.Text where toStringy = LT.toStrict
instance ToStringy LT.Text String where toStringy = LT.unpack
instance ToStringy SB.ByteString LB.ByteString where toStringy = LB.fromStrict
instance ToStringy SB.ByteString LT.Text where toStringy = LTE.decodeUtf8 . LB.fromStrict
instance ToStringy SB.ByteString ST.Text where toStringy = STE.decodeUtf8
instance ToStringy SB.ByteString String where toStringy = SBU.toString
instance ToStringy ST.Text LB.ByteString where toStringy = LTE.encodeUtf8 . LT.fromStrict
instance ToStringy ST.Text LT.Text where toStringy = LT.fromStrict
instance ToStringy ST.Text SB.ByteString where toStringy = STE.encodeUtf8
instance ToStringy ST.Text String where toStringy = ST.unpack
instance ToStringy String LB.ByteString where toStringy = LBU.fromString
instance ToStringy String LT.Text where toStringy = LT.pack
instance ToStringy String SB.ByteString where toStringy = SBU.fromString
instance ToStringy String ST.Text where toStringy = ST.pack
fromStringy :: (ToStringy a String, IsString b) => a -> b
fromStringy = fromString . toStringy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment