module Data.Enumerate.Example where
import Data.Enumerate
import Data.Array (Array)
import Data.Map (Map)
import Data.Void (Void)
import GHC.Generics (Generic)
main = do
putStrLn ""
traverse print demoEnumerated
putStrLn ""
print $ (minBound :: Demo Bool)
print $ (maxBound :: Demo Bool)
putStrLn ""
print $ demoEnumerated == [minBound..maxBound]
data Demo a
= Demo0 Void
| Demo1
| Demo2 Bool (Maybe Bool)
| Demo3 a
deriving (Show,Eq,Ord,Generic,Enumerable)
demoEnumerated :: [Demo Bool]
demoEnumerated = enumerated
instance Bounded (Demo Bool) where
minBound = minBound_enumerable array_DemoBool
maxBound = maxBound_enumerable array_DemoBool
instance Enum (Demo Bool) where
toEnum = toEnum_enumerable array_DemoBool
fromEnum = fromEnum_enumerable table_DemoBool
array_DemoBool :: Array Int (Demo Bool)
array_DemoBool = array_enumerable
table_DemoBool :: Map (Demo Bool) Int
table_DemoBool = table_enumerable