Henry,
Jason pointed out:
You'd get fromEnum and toEnum. Which I think, would give you the
int mapping that you are after.
fromEnum :: Enum a => a -> Int
toEnum :: Enum a => Int -> a
To me, this would indeed seem the way to go for your particular example.
Moreover, as for generic producer functions in general, the pattern
suggested by the Prelude would be to have
c :: Color
c = undefined
convert :: Data a => Int -> a
convert i x =
let c = dataTypeConstrs (dataTypeOf x) !! (i-1)
in fromConstr c
and then use it as in
convert 1 `asTypeOf` c
You'll find out that in most cases the (pseudo) "type annotation"
isn't really needed and the type of the value to produce can be
determined automatically by the context.
Cheers,
Stefan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe