
G'day all.
Quoting alex
I would like to do this:
class Foo t where hi :: t -> Bool
class Foo t => Bar t where hi x = True
This is arguably one of the most requested features in Haskell. The only reason why it hasn't been implemented yet is that some of the corner cases are a little subtle. But this will get fixed, won't it, haskell-prime people? What you'll have to do until then is something like this: class Num a => Alg a where (<>) :: Mat m => m -> a -> a multByVec :: (Vec v, Mat m) => m -> a -> a multByVec m v = fromColumn (m <> toColumn v) class Alg v => Vec v where toRow, toColumn :: Mat m => v -> m fromRow, fromColumn :: Mat m => m -> v fromRow = fromColumn . transpose toRow = transpose . toColumn class Alg m => Mat m where transpose :: m -> m class Alg SomeType where (<>) = multByVec class Vec SomeType where toRow = {- etc etc -} {- and so on -} Sorry, I wish there was a better answer. Cheers, Andrew Bromage