packages feed

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

module ASCII.Superset.Text where

import ASCII.CaseRefinement (ASCII'case)
import ASCII.CaseRefinement qualified as CaseRefinement
import ASCII.Refinement (ASCII)
import ASCII.Refinement qualified as Refinement
import Data.ByteString qualified as Strict (ByteString)
import Data.ByteString.Lazy qualified as Lazy (ByteString)
import Data.Char qualified as Unicode
import Data.Function (id, (.))
import Data.Kind (Type)
import Data.Text qualified as Strict (Text)
import Data.Text qualified as Text.Strict
import Data.Text.Encoding qualified as Text.Strict
import Data.Text.Lazy qualified as Lazy (Text)
import Data.Text.Lazy qualified as Text.Lazy
import Data.Text.Lazy.Encoding qualified as Text.Lazy

class ToText (a :: Type) 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