[Haskell-cafe] Type classes... popular for newbies, isn't it?
Arjun Guha
guhaarju at grinnell.edu
Sat Aug 7 00:06:21 EDT 2004
This class definition is giving me a lot of problems with the successor
function:
class (Ord st) => MinimaxState st where
successors:: st -> [(action,st)]
terminal:: st -> Bool
A trivial example would be:
instance MinimaxState Int where
terminal i = i == 0
successors i = [(1,i+1), (-1,i-1)]
However, I get this error in GHC:
Could not deduce (Num action)
from the context (MinimaxState Int, Ord Int)
arising from the literal `1' at AbTest.hs:7
Probable fix:
Add (Num action) to the class or instance method `successors'
In the first argument of `negate', namely `1'
In the list element: (- 1, (- i) - 1)
In the definition of `successors':
successors i = [(1, i + 1), (- 1, (- i) - 1)]
I have the class definition and the instance definition in seperate
files. I don't understand where I'm supposed to put the "probable fix."
I don't want it to be in the class definition, since action should be
fairly arbitrary.
In fact, no matter what I try, I get errors, for example:
instance MinimaxState Int where
terminal i = i == 0
successors i = [("action",i+1), ("action",i-1)]
Cannot unify the type-signature variable `action'
with the type `[Char]'
Expected type: action
Inferred type: [Char]
In the list element: ("action", i + 1)
In the definition of `successors':
successors i = [("action", i + 1), ("action", (- i) - 1)]
Any suggestions?
-Arjun
More information about the Haskell-Cafe
mailing list