blanks-0.4.0: src/Blanks/Name.hs
module Blanks.Name
( Name (..)
, NameOnly
, pattern NameOnly
) where
-- | 'Name' is compared on value only, allowing you to define and use
-- things like 'NameOnly' in your 'BlankInfo' values to make alpha-equivalent
-- terms structurally ('Eq') equivalent.
data Name n a =
Name
{ _nameKey :: n
, _nameValue :: a
}
deriving (Show, Functor, Foldable, Traversable)
instance Eq a => Eq (Name n a) where
Name _ x == Name _ y = x == y
-- An erased 'Name'.
type NameOnly n = Name n ()
pattern NameOnly :: n -> NameOnly n
pattern NameOnly n = Name n ()
{-# COMPLETE NameOnly #-}