packages feed

argo-0.2022.2.2: source/library/Argo/Schema/Identifier.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveLift #-}

module Argo.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
import qualified GHC.Generics as Generics

newtype Identifier
    = Identifier Text.Text
    deriving (Eq, Generics.Generic, TH.Lift, DeepSeq.NFData, Ord, Show)

instance String.IsString Identifier where
    fromString = fromText . String.fromString

instance Semigroup Identifier where
    x <> y = fromText $ toText x <> toText y -- TODO: remove this

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

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