module Programmer where data OperatingSystem = GnuPlusLinux | OpenBSDPlusNevermindJustBSDStill | Mac | Windows deriving (Eq, Show) data ProgLang = Haskell | Agda | Idris | PureScript deriving (Eq, Show) data Programmer = Programmer { os :: OperatingSystem , lang :: ProgLang } deriving (Eq, Show) allOperatingSystems :: [OperatingSystem] allOperatingSystems = [ GnuPlusLinux , OpenBSDPlusNevermindJustBSDStill , Mac , Windows ] allLanguages :: [ProgLang] allLanguages = [ Haskell , Agda , Idris , PureScript ] allProgrammers :: [Programmer] allProgrammers = do o <- allOperatingSystems l <- allLanguages return Programmer { os = o , lang = l }