{-# LANGUAGE DeriveLift #-}

module Argo.Internal.Schema.Identifier where

import qualified Argo.Vendor.DeepSeq as DeepSeq
import qualified Argo.Vendor.TemplateHaskell as TH
import qualified Argo.Vendor.Text as Text
import qualified Data.String as String

newtype Identifier
    = Identifier Text.Text
    deriving (Identifier -> Identifier -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Identifier -> Identifier -> Bool
$c/= :: Identifier -> Identifier -> Bool
== :: Identifier -> Identifier -> Bool
$c== :: Identifier -> Identifier -> Bool
Eq, forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => Identifier -> m Exp
forall (m :: * -> *). Quote m => Identifier -> Code m Identifier
liftTyped :: forall (m :: * -> *). Quote m => Identifier -> Code m Identifier
$cliftTyped :: forall (m :: * -> *). Quote m => Identifier -> Code m Identifier
lift :: forall (m :: * -> *). Quote m => Identifier -> m Exp
$clift :: forall (m :: * -> *). Quote m => Identifier -> m Exp
TH.Lift, Eq Identifier
Identifier -> Identifier -> Bool
Identifier -> Identifier -> Ordering
Identifier -> Identifier -> Identifier
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Identifier -> Identifier -> Identifier
$cmin :: Identifier -> Identifier -> Identifier
max :: Identifier -> Identifier -> Identifier
$cmax :: Identifier -> Identifier -> Identifier
>= :: Identifier -> Identifier -> Bool
$c>= :: Identifier -> Identifier -> Bool
> :: Identifier -> Identifier -> Bool
$c> :: Identifier -> Identifier -> Bool
<= :: Identifier -> Identifier -> Bool
$c<= :: Identifier -> Identifier -> Bool
< :: Identifier -> Identifier -> Bool
$c< :: Identifier -> Identifier -> Bool
compare :: Identifier -> Identifier -> Ordering
$ccompare :: Identifier -> Identifier -> Ordering
Ord, Int -> Identifier -> ShowS
[Identifier] -> ShowS
Identifier -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Identifier] -> ShowS
$cshowList :: [Identifier] -> ShowS
show :: Identifier -> String
$cshow :: Identifier -> String
showsPrec :: Int -> Identifier -> ShowS
$cshowsPrec :: Int -> Identifier -> ShowS
Show)

instance DeepSeq.NFData Identifier where
    rnf :: Identifier -> ()
rnf = forall a. NFData a => a -> ()
DeepSeq.rnf forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identifier -> Text
toText

instance String.IsString Identifier where
    fromString :: String -> Identifier
fromString = Text -> Identifier
fromText forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. IsString a => String -> a
String.fromString

instance Semigroup Identifier where
    Identifier
x <> :: Identifier -> Identifier -> Identifier
<> Identifier
y = Text -> Identifier
fromText forall a b. (a -> b) -> a -> b
$ Identifier -> Text
toText Identifier
x forall a. Semigroup a => a -> a -> a
<> Identifier -> Text
toText Identifier
y

fromText :: Text.Text -> Identifier
fromText :: Text -> Identifier
fromText = Text -> Identifier
Identifier

toText :: Identifier -> Text.Text
toText :: Identifier -> Text
toText (Identifier Text
x) = Text
x