packages feed

bitmasks-0: test/Data/Pizza.hs

{-# LANGUAGE DerivingVia #-}

module Data.Pizza where

import Data.Bitmask

import Test.QuickCheck

-- Pizza toppings enumeration

data PizzaTopping =
    Cheese
  | Mushrooms
  | Pineapple
  | Ham
  deriving (Show, Eq, Ord, Bounded, Enum)

instance Arbitrary PizzaTopping where
  arbitrary = chooseEnum (minBound :: PizzaTopping, maxBound :: PizzaTopping)

type PizzaMask = Bitmask8 PizzaTopping

-- Pizza examples
margherita :: PizzaMask
margherita = fromFlags [Cheese]

veggie :: PizzaMask
veggie = fromExceptFlags [Ham]

hawaiian :: PizzaMask
hawaiian = addFlags [Pineapple, Ham] margherita