
{- Hi, Consider the following Haskell data, class and instance definitions The intended semantics are: Two objects are equal if they have the same name. The type of the name depends on the type of the object -} data Object a = Object a class Named o n | o -> n where name :: o -> n instance (Eq n, Named o n) => Eq o where o1 == o2 = name(o1) == name(o2) {- I have three questions about these definitions. 1) Does the above code capture the intended meaning? 2) Does Object a *fit* the Named class?, or do I need a different sort of Object? 3) How would I write an instance of Named that implements the name function correctly. Thomson[1] shows how to do this for non-dependent types [1]Haskell: The Craft of Functional Programming, Second Edition, Page 272 -}