packages feed

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

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

module Data.Stringz.String 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 HasString a where
  string ::
    Lens' a String

instance HasString [Char] where
  string =
    id
instance HasString Text.Text where
  string =
    iso
      Text.unpack
      Text.pack

instance HasString LazyText.Text where
  string =
    iso
      LazyText.unpack
      LazyText.pack

instance HasString ByteStringChar8.ByteString where
  string =
    iso ByteStringChar8.unpack ByteStringChar8.pack . string

instance HasString ByteStringLazyChar8.ByteString where
  string =
    iso ByteStringLazyChar8.unpack ByteStringLazyChar8.pack . string

instance HasString a => HasString (Identity a) where
  string =
    iso runIdentity Identity . string

instance HasString a => HasString (Const a b) where
  string =
    iso getConst Const . string

class AsString a where
  _String ::
    Prism' a String

instance AsString [Char] where
  _String =
    id

instance AsString Text.Text where
  _String =
    iso
      Text.unpack
      Text.pack

instance AsString LazyText.Text where
  _String =
    iso
      LazyText.unpack
      LazyText.pack

instance AsString ByteStringChar8.ByteString where
  _String =
    iso ByteStringChar8.unpack ByteStringChar8.pack . _String

instance AsString ByteStringLazyChar8.ByteString where
  _String =
    iso ByteStringLazyChar8.unpack ByteStringLazyChar8.pack . _String

instance AsString a => AsString (Identity a) where
  _String =
    iso runIdentity Identity . _String

instance AsString a => AsString (Const a b) where
  _String =
    iso getConst Const . _String