Klaus Ostermann wrote:
> I am not a Haskell expert, and I am currently exploring type classes
> and need some advice.

The most important advice is probably to point out that a `class' in
Haskell is roughly comparable to an `interface' in Java, but not to a
`class'.

> class Node n where
>   isConnectedTo :: Graph g n e => g -> n -> e -> Bool

This is not what you want.  The type says: "Every node can find out
whether it is connected to a given edge _in_any_type_of_graph_", which
is clearly impossible given that your Graph class has no methods.

Is your setting the notion of being a `Node' only makes sense in
connection with a type of `Graph'.  The right thing to so is probably to
drop the classes `Edge' and `Node' and put their methods into the
`Graph' class.

class Graph g n e | g -> n e where
        isConnectedTo :: g -> n -> e -> Bool
        n1 :: g -> e -> n
        n2 :: g -> e -> n
        

Udo.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to