dph-base-0.5.1.1: Data/Array/Parallel/Base/Util.hs
-- | Constructor tags.
module Data.Array.Parallel.Base.Util (
Tag, fromBool, toBool, tagToInt, intToTag
) where
import Data.Word ( Word8 )
-- | Given a value of an algebraic type, the tag tells us what
-- data constructor was used to create it.
type Tag = Int
-- | Get the `Tag` of a `Bool` value. `False` is 0, `True` is 1.
{-# INLINE fromBool #-}
fromBool :: Bool -> Tag
fromBool False = 0
fromBool True = 1
-- | Convert a `Tag` to a `Bool` value.
{-# INLINE toBool #-}
toBool :: Tag -> Bool
toBool n | n == 0 = False
| otherwise = True
-- | Convert a `Tag` to an `Int`. This is identity at the value level.
{-# INLINE tagToInt #-}
tagToInt :: Tag -> Int
tagToInt = id
-- | Convert an `Int` to a `Tag`. This is identity at the value level.
{-# INLINE intToTag #-}
intToTag :: Int -> Tag
intToTag = id