packages feed

stringz-0.0.1: src/Data/Stringz/ByteString.hs

{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE FlexibleInstances #-}

module Data.Stringz.ByteString where

import Control.Lens
import qualified Data.ByteString.Char8 as ByteStringChar8
import qualified Data.ByteString.Lazy.Char8 as ByteStringLazyChar8
import qualified Data.Text as Text
import qualified Data.Text.Lazy as LazyText

class HasByteString a where
  byteString ::
    Lens' a ByteStringChar8.ByteString

instance HasByteString [Char] where
  byteString =
    iso
      ByteStringChar8.pack
      ByteStringChar8.unpack

instance HasByteString Text.Text where
  byteString =
    iso Text.unpack Text.pack . iso ByteStringChar8.pack ByteStringChar8.unpack

instance HasByteString LazyText.Text where
  byteString =
    iso LazyText.unpack LazyText.pack . iso ByteStringChar8.pack ByteStringChar8.unpack

instance HasByteString ByteStringChar8.ByteString where
  byteString =
    id

instance HasByteString ByteStringLazyChar8.ByteString where
  byteString =
    iso ByteStringLazyChar8.toStrict ByteStringLazyChar8.fromStrict

instance HasByteString a => HasByteString (Identity a) where
  byteString =
    iso runIdentity Identity . byteString

instance HasByteString a => HasByteString (Const a b) where
  byteString =
    iso getConst Const . byteString

class HasLazyByteString a where
  lazyByteString ::
    Lens' a ByteStringLazyChar8.ByteString

instance HasLazyByteString [Char] where
  lazyByteString =
    iso
      ByteStringLazyChar8.pack
      ByteStringLazyChar8.unpack

instance HasLazyByteString Text.Text where
  lazyByteString =
    iso Text.unpack Text.pack . iso ByteStringLazyChar8.pack ByteStringLazyChar8.unpack

instance HasLazyByteString LazyText.Text where
  lazyByteString =
    iso LazyText.unpack LazyText.pack . iso ByteStringLazyChar8.pack ByteStringLazyChar8.unpack

instance HasLazyByteString ByteStringChar8.ByteString where
  lazyByteString =
    iso ByteStringChar8.fromStrict ByteStringChar8.toStrict

instance HasLazyByteString ByteStringLazyChar8.ByteString where
  lazyByteString =
    id

instance HasLazyByteString a => HasLazyByteString (Identity a) where
  lazyByteString =
    iso runIdentity Identity . lazyByteString

instance HasLazyByteString a => HasLazyByteString (Const a b) where
  lazyByteString =
    iso getConst Const . lazyByteString

class AsByteString a where
  _ByteString ::
    Prism' a ByteStringChar8.ByteString

instance AsByteString [Char] where
  _ByteString =
    iso
      ByteStringChar8.pack
      ByteStringChar8.unpack

instance AsByteString Text.Text where
  _ByteString =
    iso Text.unpack Text.pack . _ByteString

instance AsByteString LazyText.Text where
  _ByteString =
    iso LazyText.unpack LazyText.pack . _ByteString

instance AsByteString ByteStringChar8.ByteString where
  _ByteString =
    id

instance AsByteString ByteStringLazyChar8.ByteString where
  _ByteString =
    iso ByteStringLazyChar8.toStrict ByteStringLazyChar8.fromStrict

instance AsByteString a => AsByteString (Identity a) where
  _ByteString =
    iso runIdentity Identity . _ByteString

instance AsByteString a => AsByteString (Const a b) where
  _ByteString =
    iso getConst Const . _ByteString

class AsLazyByteString a where
  _LazyByteString ::
    Prism' a ByteStringLazyChar8.ByteString

instance AsLazyByteString [Char] where
  _LazyByteString =
    iso
      ByteStringLazyChar8.pack
      ByteStringLazyChar8.unpack

instance AsLazyByteString Text.Text where
  _LazyByteString =
    iso Text.unpack Text.pack . _LazyByteString

instance AsLazyByteString LazyText.Text where
  _LazyByteString =
    iso LazyText.unpack LazyText.pack . _LazyByteString

instance AsLazyByteString ByteStringChar8.ByteString where
  _LazyByteString =
    iso ByteStringLazyChar8.fromStrict ByteStringLazyChar8.toStrict

instance AsLazyByteString ByteStringLazyChar8.ByteString where
  _LazyByteString =
    id

instance AsLazyByteString a => AsLazyByteString (Identity a) where
  _LazyByteString =
    iso runIdentity Identity . _LazyByteString

instance AsLazyByteString a => AsLazyByteString (Const a b) where
  _LazyByteString =
    iso getConst Const . _LazyByteString