I am really confused about classes in haskell. If I had the code:
class GetResult n where res :: n -> Int
class (GetResult n) => Model n where
starting :: Int -> [Int] -> n
starting i j = .....
test :: n -> n
test n = ......
What type is n? What type would starting output and test take as input?
Your confusion might be caused by the fact that type classes in Haskell have nothing to do with classes in OO. Most importantly type classes don’t describe objects, they describe types.
A type class describes a set of methods. You can implement those methods for a given type to make that type an instance of the class. So your type class definition of GetResult can be read as “A type n can be made an instance of GetResult by implementing the method
resof typen -> Int“. Sonis simply the type that wants to become an instance ofGetResult.As an example if you wanted to make
Intan instance ofGetResult, you could use the following instance declaration:In this case
nwould beInt.