naturalcomp-0.0.1: Text/NaturalComp/Stringy.hs
{-# LANGUAGE FlexibleInstances #-}
{- |
Module: Text.NaturalComp.Stringy
Copyright: 2013 Hironao Komatsu
License: BSD
Maintainer: Hironao Komatsu <hirkmt@gmail.com>
Portability: portable
A type class that have methods @uncons@ and @toString@, so that we
can handle them as String-like objects.
-}
module Text.NaturalComp.Stringy (Stringy (..)) where
import qualified Data.ByteString.UTF8 as U
import qualified Data.ByteString.Lazy.UTF8 as UL
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
class Stringy s where
uncons :: s -> Maybe (Char, s)
toString :: s -> String
instance Stringy [Char] where
uncons [] = Nothing
uncons (x:xs) = Just (x, xs)
toString = id
instance Stringy U.ByteString where
uncons = U.uncons
toString = U.toString
instance Stringy UL.ByteString where
uncons = UL.uncons
toString = UL.toString
instance Stringy T.Text where
uncons = T.uncons
toString = T.unpack
instance Stringy TL.Text where
uncons = TL.uncons
toString = TL.unpack