[Haskell-cafe] Type Directed Name Resolution
Neil Brown
nccb2 at kent.ac.uk
Wed Nov 10 09:57:36 EST 2010
On 10/11/10 12:36, Yves Parès wrote:
> I think this idea is a stairway to duck typing.
> I exagerate, of course, but here is my point:
>
> It shouldn't be difficult to make a class:
> class HasName a where
> name :: a -> String
For accessing parts of data structures that have the same type, I agree
that a type-class is best. However, this doesn't cover the situation
where the type of the field is different across types, e.g.
data SomeXmlDerivedThingy = C { name :: Maybe String }
data Person = P { name :: String }
Then you'd need a fundep on your class, which begins to get ugly:
class HasName a b | a -> b where
name :: a -> b
It also doesn't work when the two instances of name come from totally
separate libraries that don't know anything about each other (e.g. one's
an xml library, the other is a database library). Then you have to add
such a class in your own code to resolve the conflict. But having read
the wiki page, it seems TDNR doesn't work in where I would particularly
want it (e.g. record updating), so I'm not sure it's that worthwhile.
As an aside, the rule on the wiki page says "Unlike normal unqualified
variable occurrences, it is legal for there to be many f's in scope. To
resolve which one is intended, find the type of a, and the type of all
of the in-scope f's. If there is exactly one f whose type matches that
of a, that resolve the occurrence of f. Otherwise the program is in error. "
I wonder if special syntax is actually needed for this. How much of the
language would be broken by adopting the general rule: "If the only
definitions of f are at the top-level or imported, find the type of 'a'
and the type of all the in-scope 'f' s. If there is exactly one match
then use it, otherwise it's an error."?
Thanks,
Neil.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20101110/d128fc5e/attachment.html
More information about the Haskell-Cafe
mailing list