[plt-scheme] "appending" to classes rather than extending

From: Rob Hunter (rob.hunter at gmail.com)
Date: Wed Mar 5 16:51:41 EST 2008

Thanks, Matthias.  Below is my interpretation of your suggestion of
using units to get this effect.  The only parts of my solution that I
don't like is how I had to prefix the import in extension-unit%, and
how I had to explicitly define foo for export even though I didn't
want to override it.  Surely there's a way to avoid both of those
things...

Thanks,
Rob

(define-signature sig^ (foo bar))

(define-unit base-unit%
  (import)
  (export sig^)

  (define (foo)
    "foo base impl")

  (define (bar)
    "bar base impl"))

(define-unit extension-unit%
  (import (prefix base: sig^))
  (export sig^)

  (define foo base:foo)

  (define (bar)
    "appended bar impl"))

(define-compound-unit merged-unit%
  (import)
  (export RESULT)
  (link [((BASE : sig^)) base-unit%]
        [((RESULT : sig^)) extension-unit% BASE]))


REPL interaction:
> (define-values/invoke-unit merged-unit% (import) (export sig^))
> (foo)
"foo base impl"
> (bar)
"appended bar impl"






On Wed, Mar 5, 2008 at 12:58 PM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
>
>  You could achieve this kind of effect (via units) but re-definitions
>  in a module (and that's what this boils down to) of the same name are
>  frowned upon in Scheme. -- Matthias
>
>  P.S. Re-definitions at the top-level have been around for a LONG time
>  and there is a reason why Schemers are moving away from that approach.
>
>
>
>  On Mar 5, 2008, at 3:41 PM, Rob Hunter wrote:
>
>  > Hi all,
>  >
>  > I'm looking to be able to append a few methods to a class.  In Ruby, I
>  > can do something like this:
>  >
>  > class Foo
>  >   def bar
>  >     ...
>  >   end
>  >   ...
>  > end
>  >
>  > class Foo
>  >   def baz
>  >     ...
>  >   end
>  > end
>  >
>  > and both bar and baz will be a part of Foo (these two class defs could
>  > be in the same file, or in two different files that are both loaded).
>  > Anything like this in the PLT Scheme class system?
>  >
>  > Thanks,
>  > Rob
>  > _________________________________________________
>  >   For list-related administrative tasks:
>  >   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>


Posted on the users mailing list.