On Fri, 25 Apr 2008, Hans Aberg wrote:

On 18 Apr 2008, at 20:04, Martin Sulzmann wrote:

Let's consider our running example

class D a b | a -> b
instance D a b => D [a] [b]

which we can write in CHR notation

D a b, D a c ==> b=c    (FD)

D [a] [b] <=> D a b       (Inst)

These rules overlap.

I experimented with translations into GNU Prolog (gprolog). Since "=" is hard to get working in Prolog unless integrated into unification, I tried (using the idea of rewriting unique existence as functions, possible if one assumes the axiom of choice):
class(d, A, b(A)).
instance(d, l(A), l(B)) :- class(d, A, B).
Then:
?- instance(d, l(A), l(B)).
B = b(A)

?- instance(d, l(A), C).
C = l(b(A))

?- instance(d, l(A), l(B)), instance(d, l(A), C).
B = b(A)
C = l(b(A))
Though I am not sure about the intended semantics, it does produce unique solutions.

Prolog works under the assumption of a closed world. That's contrary to the open world view of regular type classes. So these aren't the intended semantics.

Tom

--
Tom Schrijvers

Department of Computer Science
K.U. Leuven
Celestijnenlaan 200A
B-3001 Heverlee
Belgium

tel: +32 16 327544
e-mail: [EMAIL PROTECTED]
url: http://www.cs.kuleuven.be/~toms/
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to