overeasy-0.1.0: test/Test/Overeasy/Arith.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE TemplateHaskell #-}
module Test.Overeasy.Arith
( ArithF (..)
, Arith (..)
) where
import Control.DeepSeq (NFData)
import Data.Functor.Foldable.TH (makeBaseFunctor)
import Data.Hashable (Hashable)
import GHC.Generics (Generic)
data Arith =
ArithPlus Arith Arith
| ArithTimes Arith Arith
| ArithShiftL Arith !Int
| ArithShiftR Arith !Int
| ArithConst !Int
deriving stock (Eq, Show, Generic)
deriving anyclass (Hashable, NFData)
-- Generates 'ArithF' and other recursion-schemes boilerplate
makeBaseFunctor ''Arith
deriving stock instance Eq a => Eq (ArithF a)
deriving stock instance Show a => Show (ArithF a)
deriving stock instance Generic (ArithF a)
deriving anyclass instance Hashable a => Hashable (ArithF a)
deriving anyclass instance NFData a => NFData (ArithF a)