{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveLift #-} module Data.Morpheus.Types.Internal.Base ( Key , Collection , Position , EnhancedKey(..) , Location(..) , Message , enhanceKeyWithNull ) where import Data.Aeson (FromJSON, ToJSON) import Data.Text (Text) import GHC.Generics (Generic) import Language.Haskell.TH.Syntax (Lift) type Position = Location data Location = Location { line :: Int , column :: Int } deriving (Show, Generic, FromJSON, ToJSON, Lift) type Key = Text type Message = Text type Collection a = [(Key, a)] -- Text value that includes position for debugging, where EnhancedKey "a" 1 === EnhancedKey "a" 3 data EnhancedKey = EnhancedKey { uid :: Text , location :: Position } deriving (Show) instance Eq EnhancedKey where (EnhancedKey id1 _) == (EnhancedKey id2 _) = id1 == id2 instance Ord EnhancedKey where compare (EnhancedKey x _) (EnhancedKey y _) = compare x y enhanceKeyWithNull :: Key -> EnhancedKey enhanceKeyWithNull text = EnhancedKey {uid = text, location = Location 0 0}