[racket] CLOS-like multiple dispatch over types

From: Roman Klochkov (kalimehtar at mail.ru)
Date: Mon Feb 3 10:23:09 EST 2014

I've ported little collection for making CLOS-like generics  https://github.com/Kalimehtar/gls

It gives you possibility to make generics over any predicates or racket/class classes:

Example (impossible in swindle):

(define (fact x)
  (defgeneric fact0
    (method ((n (and? <integer> (<=/c 1))) (acc <integer>))
    (method ((n <integer>) (acc <integer>))
            (fact0 (- n 1) (* acc n))))
  (fact0 x 1))

You may add methods dynamically:
(defgeneric g)
(add-method g (method ((x frame%)) (do-something-with-frame x ...)))
(add-method g (method ((x button%)) (do-something-with-button x ...)))

More examples in  https://github.com/Kalimehtar/gls/blob/master/gls/test.rkt

P. S. Can't add it to pkg.racket-lang.org. Press "login" then "Log in", but no email. :-(

Roman Klochkov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140203/c363b4c1/attachment.html>

Posted on the users mailing list.