{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FlexibleInstances #-}
module Data.TypedEncoding.Common.Class.IsStringR where
import Data.Proxy
import Data.String
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
class IsStringR a where
toString :: a -> String
prop_fromStringToString :: forall s . (IsString s, IsStringR s, Eq s) => s -> Bool
prop_fromStringToString :: s -> Bool
prop_fromStringToString s
x = s
x s -> s -> Bool
forall a. Eq a => a -> a -> Bool
== (IsString s => String -> s
forall a. IsString a => String -> a
fromString @s (String -> s) -> (s -> String) -> s -> s
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> String
forall a. IsStringR a => a -> String
toString (s -> s) -> s -> s
forall a b. (a -> b) -> a -> b
$ s
x)
prop_toStringFromString :: forall s . (IsString s, IsStringR s) => Proxy s -> String -> Bool
prop_toStringFromString :: Proxy @* s -> String -> Bool
prop_toStringFromString Proxy @* s
_ String
x = String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== (IsStringR s => s -> String
forall a. IsStringR a => a -> String
toString @s (s -> String) -> (String -> s) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> s
forall a. IsString a => String -> a
fromString (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
x)
instance IsStringR T.Text where
toString :: Text -> String
toString = Text -> String
T.unpack
instance IsStringR TL.Text where
toString :: Text -> String
toString = Text -> String
TL.unpack
instance IsStringR [Char] where
toString :: String -> String
toString = String -> String
forall a. a -> a
id