Re: one-of and other questions on goo's type system
Jonathan Bachrach <[email protected]> 27 Sep 2002 08:40:47 -0400
| Newsgroups | gmane.comp.lang.goo.general |
|---|---|
| Message-ID | <[email protected]> |
Alexander S A Kjeldaas <[email protected]> writes: > On Fri, Sep 20, 2002 at 03:13:06PM +0200, Benedikt Grundmann wrote: > ... > Speaking of Eiffel. Is it possible to specify an eiffel 'like' type > in goo? It is something like: > > (dg somefunc (arg1|<type1> arg2|(t= (typeof arg1)))) > > That is - whenever one calls somefunc, arg1 and arg2 must be of the > same type (in eiffel - the static type so it's checked at compile > time). It also guarantees that if arg1 is a subtype of <type1>, > somefunc will return the same subtype of <type1>. i've uploaded james knight's masters thesis on parameterized types for goo. it does have of notion of linking parameter types and could also be applied to generics. jonathan > In eiffel this is typically used for return values. If you get an > object into a function you want to return an object of the same type, > so you want to say: > > (dg dostuff-with-fruit (f|<fruit> => (typeof f))) > > This is more precice than saying > > (dg dostuff-with-fruit (f|<fruit> => <fruit>)) > > Consider: > > (dc <fruit> (any)) > (dc <apple> (<fruit>)) > (dg dostuff-with-fruit (f|<fruit> => <fruit>)) > (dg dostuff-with-apple (a|<apple> => <apple>)) > (def apple (new <apple>)) > (dostuff-with-apple (dostuff-with-fruit apple)) > > In the above case, the type of the 'a' argument to dostuff-with-apple > must be type-checked. If dostuff-with-fruit was defined to return the > same type as the input type, no such check would be necessary even if > the definition of dostuff-with-fruit was unavailable. > > astor