module Music.Theory.Enum where
genericFromEnum :: (Integral i,Enum e) => e -> i
genericFromEnum = fromIntegral . fromEnum
genericToEnum :: (Integral i,Enum e) => i -> e
genericToEnum = toEnum . fromIntegral
enum_from_to_cyclic :: (Bounded a, Enum a) => a -> a -> [a]
enum_from_to_cyclic p q =
if fromEnum p > fromEnum q
then [p .. maxBound] ++ [minBound .. q]
else [p .. q]
enum_from_to_reverse :: Enum a => a -> a -> [a]
enum_from_to_reverse p q =
if fromEnum p > fromEnum q
then reverse [q .. p]
else [p .. q]
enum_univ :: (Bounded t,Enum t) => [t]
enum_univ = [minBound .. maxBound]