
Ben Gamari wrote:
As far as I know, you'd need to do something like this to accomplish what you are after,
{-# LANGUAGE MultiParamTypeClasses, DefaultSignatures #-}
class Bar a where bar :: a -> Int
class FooBar a b where foobar :: a -> b -> Int default foobar :: Bar a => a -> b -> Int foobar avalue bvalue = bar avalue
instance Bar Int where bar i = 5 instance FooBar Int Int
main = do print $ bar (4::Int) print $ foobar (5::Int) (2::Int)
It seems that the "DefaultSignatures" extension is not necessary, the following version works correctly on my computer (ghc 7.6.2): ------- {-# LANGUAGE MultiParamTypeClasses #-} class Bar a where bar :: a -> Int class FooBar a b where foobar :: Bar a => a -> b -> Int foobar avalue bvalue = bar avalue instance Bar Int where bar i = 5 instance FooBar Int Int main = do print $ bar (4::Int) print $ foobar (5::Int) (2::Int) -------