glean-0.1.0.0: glean/hs/Glean/Typed/Id.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
-- Note: UnboxedTuples needed for deriving Prim
{-# LANGUAGE GeneralizedNewtypeDeriving, UnboxedTuples #-}
-- | This does not import Glean modules at all
module Glean.Typed.Id
( -- * Id-like
Pid(..), Fid(..)
, PidOf(..), IdOf(..)
) where
import Control.DeepSeq
import Data.Hashable (Hashable)
import Compat.Prettyprinter (Pretty(..))
import Data.Vector.Primitive (Prim)
import Foreign.Storable (Storable)
import Glean.RTS.Types
-- -----------------------------------------------------------------------------
-- | Tie the Pid to a predicate phantom type 'p'.
newtype PidOf p = PidOf { pidOf :: Pid }
deriving(Eq, Ord, Show)
instance Pretty (PidOf p) where
pretty (PidOf p) = pretty p
-- | Id of a fact of a given predicate type 'p' (phantom type parameter).
-- Note: This is not the Id/Fid/Pid of the definition of predicate 'p'.
newtype IdOf p = IdOf { idOf :: Fid }
deriving(Eq, Ord, Show, Hashable, NFData, Storable, Prim)
instance Pretty (IdOf p) where
pretty (IdOf f) = pretty f