Created
April 22, 2014 18:44
-
-
Save bergmark/11190017 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# 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