-- |Representations of (string) data that can be routed/parsed.
{-# LANGUAGE FlexibleInstances #-}
module Web.Route.Invertible.String
  ( RouteString(..)
  ) where

import qualified Data.ByteString.Char8 as BS
import Data.Hashable (Hashable(..))
import Data.String (IsString(..))
import qualified Data.Text as T

-- |Representions of request data that can be used in routing
class (Eq s, IsString s, Hashable s, Monoid s) => RouteString s where
  -- |Must be the inverse of 'fromString'
  toString :: s -> String

instance RouteString String where
  toString :: String -> String
toString = String -> String
forall a. a -> a
id
instance RouteString T.Text where
  toString :: Text -> String
toString = Text -> String
T.unpack
instance RouteString BS.ByteString where
  toString :: ByteString -> String
toString = ByteString -> String
BS.unpack