packages feed

enumerate-0.0.0: sources/Data/Enumerate/Example.hs

{-# LANGUAGE LambdaCase, DeriveGeneric, DeriveAnyClass #-}
module Data.Enumerate.Example where 
import Data.Enumerate 

import           System.Environment             (getArgs)
import           Data.Void (Void)
import           GHC.Generics (Generic) 


main = mainWith =<< getArgs

mainWith = \case
 _ -> return() 


{- | (for documentation) 

demonstrates: empty type, unit type, product type, sum type, type variable.

with @\{\-\# LANGUAGE DeriveGeneric, DeriveAnyClass \#\-\}@, the derivation is a one-liner: 

@
data DemoEnumerable a = ... deriving (Show,Generic,Enumerable) 
@

-}
data DemoEnumerable a
 = DemoEnumerable0 Void
 | DemoEnumerable1
 | DemoEnumerable2 Bool (Maybe Bool) 
 | DemoEnumerable3 a
 deriving (Show,Generic,Enumerable) 

{- | (for documentation) 

@demoEnumerated = enumerated@

>>> traverse print demoEnumerated
DemoEnumerable1
DemoEnumerable2 False Nothing
DemoEnumerable2 False (Just False)
DemoEnumerable2 False (Just True)
DemoEnumerable2 True Nothing
DemoEnumerable2 True (Just False)
DemoEnumerable2 True (Just True)
DemoEnumerable3 False
DemoEnumerable3 True

-}
demoEnumerated :: [DemoEnumerable Bool] 
demoEnumerated = enumerated