Question 1: Is there an easier, more elegant way to write this code?
For the most part, no.
Question 2: Is there a way to express the following relationship? I want to have a set of symbols with ordering and another set that is part of that ordering but with a different parent. For exammple,
data Player = Detective | Fugitive deriving (Enum) data Detective = Red | Green | Blue deriving (Enum) data Fugitive = MrX deriving (Enum)
How about something like:
data Player = Detective Detective | Fugitive Fugitive deriving (Enum) data Detective = Red | Green | Blue deriving (Enum) data Fugitive = MrX deriving (Enum)
(I'm not sure if the deriving Enum on Player will be exactly what you want -- I think so though. I don't derive this class very often.) Then you can test detectiveness by:
isDetective (Detective _) = True isDetective _ = False
HTH - Hal