packages feed

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