
2009/12/20
Maybe I didn't understand the exercise if have to do. It says: "Write the instance Enum Nat where toEnum is defined as a total function that returns Z for negative integers. Some examples: *Main> toEnum (-1) :: Nat Z *Main> toEnum 0 :: Nat Z *Main> toEnum 1 :: Nat S Z *Main> fromEnum (S (S Z)) 2
so I did: data Nat = Z | S Nat deriving (Eq,Ord,Show) instance Enum Nat where toEnum x|x > 0 = S Z |otherwise = Z
somehow it looks really wrong. Do you understand want I have to do and how it should look like?
In your current definition of toEnum, you always return "S Z" (in other words, "1", "the successor of zero") for any integer i > 0. This is clearly incorrect as you said. Your "otherwise" guard is correct, but the other one is not. I get the feeling that this exercise is about learning how to use recursion, so look into that. A few relevant links: http://en.wikibooks.org/wiki/Haskell/Recursion (the factorial example) http://learnyouahaskell.com/recursion http://book.realworldhaskell.org/read/functional-programming.html Hope that helps -- Deniz Dogan