
Hi, I was playing around with haskell, and decided to implement a RockPaperScissors type. data RPS= Rock | Paper | Scissors Then I manually derived show for fun. instance Show RPS where show Rock = "rock" show Paper = "paper" show Scissors = "scissors" But, I have a problem when defining ord. How do I look in the sourcecode for ord? In ghci I did prelude> :i Ord <snip> Ord (a, b, c, d, e, f, g, h, i, j) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i) => Ord (a, b, c, d, e, f, g, h, i) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h) => Ord (a, b, c, d, e, f, g, h) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) => Ord (a, b, c, d, e, f, g) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) => Ord (a, b, c, d, e, f) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d) -- Defined in `GHC.Classes' instance (Ord a, Ord b, Ord c) => Ord (a, b, c) -- Defined in `GHC.Classes' instance (Ord a, Ord b) => Ord (a, b) -- Defined in `GHC.Classes' instance Ord () -- Defined in `GHC.Classes' Prelude> Where is ghc.classes? I looked under the ghc directory and didn't find a classes.hs file. I tried defining it as such. instance Ord RPS where ord Scissors `compare` Rock = LT ord Paper `compare` Scissors = LT ord Rock `compare` Paper = LT But this fails with verry little errors, and I really don't know how I define an instance of Ord for this. I want rock to be less than paper, but greater than scissors, scissors to be less than rock but greater than paper, and paper to be greater than rock but less than scissors. Kind of geeky, but it's one way of learning. Also, What is the best way to write useful programs, One example I tried is to make a simple guess what I am guessing game, but I couldn't make heads or tails of the IO typeclasses, or the System.Random module. How can I possibly get random numbers and do things on them, and does this mean main must be imperative with a do statement? Thanks, Derek