IsText.hs 887 B

1234567891011121314151617181920212223242526272829
  1. {-# LANGUAGE TypeSynonymInstances #-}
  2. {-# LANGUAGE FlexibleInstances #-}
  3. module Data.Text.IsText where
  4. import Data.String
  5. import qualified Data.ByteString as SB
  6. import qualified Data.ByteString.Lazy as LB
  7. import qualified Codec.Binary.UTF8.String as UTF8
  8. import qualified Data.Text as T
  9. {- | Type class for data structures that are logically text -}
  10. class IsString a => IsText a where
  11. toString :: a -> String
  12. instance IsText String where
  13. toString = id
  14. {- | The UTF-8 encoding is assumed for ByteStrings -}
  15. instance IsText SB.ByteString where
  16. toString = UTF8.decode . SB.unpack
  17. {- | The UTF-8 encoding is assumed for ByteStrings -}
  18. instance IsText LB.ByteString where
  19. toString = UTF8.decode . LB.unpack
  20. instance IsText T.Text where
  21. toString = T.unpack
  22. {- | Converts between instances of IsText -}
  23. fromText :: (IsText a, IsText b) => a -> b
  24. fromText = fromString . toString