Hal,
[I think this sort of question would be better on the haskell-cafe
list.]
I don't think what you want can be done directly. It's the old
thing about not having lambdas at the type level. You want:
instance Eq a => Coll (\x. x -> Bool) a where ...
and you just can't do that. You *can* abstract the second argument
of (->):
instance Eq a => Coll ((->) Bool) a where ...
but not the first. It's a well known shortcoming in Haskell, that you
can
partially apply type constructors, but you can't do argument
permutation.
I know of no good solution. Adding type lambdas in their full glory
makes type inference pretty much impossible. What we'd like is
a compromise. Maybe someone can invent one. But take care.
The ground is littered with corpses.
Simon
| -----Original Message-----
| From: Hal Daume III [mailto:[EMAIL PROTECTED]]
| Sent: 23 April 2002 01:30
| To: Jorge Adriano
| Cc: Haskell Mailing List
| Subject: Re: defining (-> Bool) as a set
|
|
| Yeah, both options suggested are valid, of course. But I
| really don't want to have a constructor and I'm using Edison
| where Coll is defined something like:
|
| class Coll c e where
| empty :: c e
| insert :: c e -> e -> c e
|
| etc., which precludes the fun dep solution.
|
| - Hal
|
| --
| Hal Daume III
|
| "Computer science is no more about computers | [EMAIL PROTECTED]
| than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume
|
| On Tue, 23 Apr 2002, Jorge Adriano wrote:
|
| >
| > > class Collection e ce | ce -> e where
| > > empty :: ce
| > > insert :: e -> ce -> ce
| > > member :: e -> ce -> Bool
| > >
| > > instance Eq a => Collection a (a -> Bool) where
| > > empty = (\x -> False)
| > > insert e f = (\x -> if x == e then True else f x)
| > > member e f = f e
| >
| > This is way better than my solution...
| >
| > I had never used multi-parameter classes before, so I forgot the
| > functional
| > dependency (right name? the "|ce->e"), and there was
| obviously no need for my
| > extra constructor.
| >
| > J.A.
| >
|
| _______________________________________________
| Haskell mailing list
| [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
|
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell