
On 06/02/2010 03:59 AM, Brent Yorgey wrote:
Perhaps something here may be of use?
http://okmij.org/ftp/Haskell/types.html#class-based-overloading
Enlightening. Thanks a lot. For the curious, here is my solution: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=25907#a25907 I'm gonna read the HList paper now... Best regards, Steffen
http://okmij.org/ftp/Haskell/types.html#class-based-dispatch
-Brent
On Mon, May 31, 2010 at 01:32:18PM +0200, Steffen Schuldenzucker wrote:
Dear Cafe,
let:
data True data False
class C a
(arbitrary instances for C may follow)
Now, how to obtain an "Indicator Type" for C, i.e. a type IndC that is defined via a type family / fundep / ... , so that
IndC a = True forall a which are instances of C IndC a = False for all other a.
I've collected some failed approaches here[1]. My key problem is that if I define (in the 3rd try):
instance (C a) => IndC3 a True
, it does *not* mean "Define this instance for all a which are an instance of C", but "Define the instance IndC3 a True for all types a, but it's not gonna work if a is not an instance of C".
Does anyone have another idea?
Background:
After having implemented type-level lists[2] and a quicksort on them[3], I'd like to have type-level sets. In their most simple implementation, sets are just (unsorted) lists like this:
data Nil data Cons a b class Elem x l (instances for Elem so that Elem x l iff x is an element of the list l)
Now I want:
type family Insert x s :: *
Insert x s = s forall (x, s) with (Elem x s) Insert x s = Cons x s for all other (x, s).
Thanks a lot!
Steffen
[1] http://hpaste.org/fastcgi/hpaste.fcgi/view?id=25832#a25832 [2] Kiselyov, Peyton-Jones, Shan: "Fun with type functions"
http://research.microsoft.com/en-us/um/people/simonpj/papers/assoc-types/fun... [3] I rewrote this algorithm using type families instead of fundeps:
http://www.haskell.org/haskellwiki/Type_arithmetic#An_Advanced_Example_:_Typ... _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe