packages feed

ascii-superset-1.2.7.0: library/ASCII/Superset/Text.hs

module ASCII.Superset.Text where

import ASCII.CaseRefinement (ASCII'case)
import ASCII.Refinement (ASCII)
import Data.Function (id, (.))

import qualified ASCII.CaseRefinement as CaseRefinement
import qualified ASCII.Refinement as Refinement
import qualified Data.ByteString as Strict (ByteString)
import qualified Data.ByteString.Lazy as Lazy (ByteString)
import qualified Data.Char as Unicode
import qualified Data.Text as Strict (Text)
import qualified Data.Text as Text.Strict
import qualified Data.Text.Encoding as Text.Strict
import qualified Data.Text.Lazy as Lazy (Text)
import qualified Data.Text.Lazy as Text.Lazy
import qualified Data.Text.Lazy.Encoding as Text.Lazy

class ToText a where
    toStrictText :: a -> Strict.Text
    toStrictText = Text.Lazy.toStrict . toLazyText

    toLazyText :: a -> Lazy.Text
    toLazyText = Text.Lazy.fromStrict . toStrictText

    toUnicodeCharList :: a -> [Unicode.Char]
    toUnicodeCharList = Text.Lazy.unpack . toLazyText

    {-# minimal toStrictText | toLazyText #-}

instance ToText Strict.Text where
    toStrictText = id

instance ToText Lazy.Text where
    toLazyText = id

instance ToText [Unicode.Char] where
    toUnicodeCharList = id
    toStrictText = Text.Strict.pack
    toLazyText = Text.Lazy.pack

instance ToText (ASCII Strict.Text) where
    toStrictText = Refinement.lift

instance ToText (ASCII Lazy.Text) where
    toLazyText = Refinement.lift

instance ToText (ASCII Strict.ByteString) where
    toStrictText = Text.Strict.decodeUtf8 . Refinement.lift

instance ToText (ASCII Lazy.ByteString) where
    toLazyText = Text.Lazy.decodeUtf8 . Refinement.lift

instance ToText (ASCII [Unicode.Char]) where
    toUnicodeCharList = Refinement.lift
    toStrictText = Text.Strict.pack . Refinement.lift
    toLazyText = Text.Lazy.pack . Refinement.lift

instance ToText (ASCII'case letterCase Strict.Text) where
    toStrictText = Refinement.lift . CaseRefinement.forgetCase

instance ToText (ASCII'case letterCase Lazy.Text) where
    toLazyText = Refinement.lift . CaseRefinement.forgetCase

instance ToText (ASCII'case letterCase Strict.ByteString) where
    toStrictText = Text.Strict.decodeUtf8 . Refinement.lift . CaseRefinement.forgetCase

instance ToText (ASCII'case letterCase Lazy.ByteString) where
    toLazyText = Text.Lazy.decodeUtf8 . Refinement.lift . CaseRefinement.forgetCase

instance ToText (ASCII'case letterCase [Unicode.Char]) where
    toUnicodeCharList = Refinement.lift . CaseRefinement.forgetCase
    toStrictText = Text.Strict.pack . Refinement.lift . CaseRefinement.forgetCase
    toLazyText = Text.Lazy.pack . Refinement.lift . CaseRefinement.forgetCase