[Haskell-cafe] multi parameter type classes for NP problems

Greg Buchholz haskell at sleepingsquirrel.org
Wed Dec 20 13:51:17 EST 2006


Joshua Ball wrote:
> Here is how I am trying to solve the problem, using multi-parameter
> type classes.
> 
> class NPProblem inst cert where
>    validates :: cert -> inst -> Bool
>    certificates :: inst -> [cert]
>    decide :: inst -> Bool
>    decide i = any (\x -> x `validates` i) $ certificates i
> 
> Unfortunately, ghc throws the following type error:
> 
> NPProblem.hs:5:45
>    Could not deduce (NPProblem inst a)
>      from the context (NPProblem inst cert)
>      arising from use of `certificates' at NPProblem.hs:5:45-58
>    Possible fix:
>      add (NPProblem inst a) to the class or instance method `decide'
>    In the second argument of `($)', namely `certificates i'
>    In the expression:
>          (any (\ x -> x `validates` i)) $ (certificates i)
>    In the definition of `decide':
>        decide i = (any (\ x -> x `validates` i)) $ (certificates i)

Maybe something like?...

class NPProblem inst cert where
   validates :: cert -> inst -> Bool
   certificates :: inst -> [cert]
   decide :: inst -> Bool
   decide i = any (\x -> x `validates` i) $ (certificates i :: [cert])

...or a functional dependency of some sort...

class NPProblem inst cert | inst -> cert where



More information about the Haskell-Cafe mailing list