
On Sun, Dec 27, 2009 at 02:42:48PM +0100, legajid wrote:
Hello,
I have some trouble evaluating Enum class. Following is my source:
data Authors= Buzzati | Werber | Verne | Ray | Asimov | Voltaire deriving (Enum, Show)
auths=[Buzzati .. Verne] ++ enumFrom Ray pref=take 3 auths -- 1 disp_pref=mapM_ (putStrLn) pref
This is a type error since putStrLn expects a String and pref is a list of Authors. But the 'deriving Show' means that you can use the 'show' function to convert: disp_pref = mapM_ (putStrLn . show) pref In fact, since print = putStrLn . show, you can just say disp_pref = mapM_ print pref
2. Like fromEnum gives data constructor index, is it possible with toEnum (or other way) to get the nth constructor of the given type ? eg : 2 applied to Authors (not in scope ?) would give Verne
Yes, with toEnum. Just use e.g. 'toEnum 2'. How does it know that you want an Author and not some other Enum type? Why, through the magic of type inference! As long as you use 'toEnum 2' in a context where an Author value is expected it will evaluate to Verne.
3. tried to take 'succ' of last tag in enumeration How to detect the end of an enumeration ? Can i get the maxbound index ?
Yes, if you add 'Bounded' to the list of derived classes, then 'maxBound' gives you the last one. -Brent