On a number of occasions we have received requests for implementations of
the Functors (Predicate, Transformer, Closure and Factory). These
implementations now exist in [lang], however they implement the [lang]
version of the interfaces, not the [collections] version. This problem must
be solved. I am prepared to do the work, but this requires a plan and a
vote. That way we can hopefully avoid the kind of continual reopening of
this issue that has happened. This mail aims to get opinions before moving
to a vote.


Solution #1
Move functor code from [lang] to [collections].
+ [collections] does not depend on [lang]
- You can want to use a Functor without wanting [collections], for example
[io]
- Causes problems if [lang] wants to use a functor

Solution #2
[collections] depends on [lang], with the collections interfaces deprecated
in favour of the lang ones.
+ [collections] focuses on collections only, not functors
+ functors in [lang] makes them available to other projects like [io] easily
- [collections] depends on [lang]
- functors provoke debate as to whether they should be in [lang]

Solution #3
[functor] project, that contains the functor interfaces, implementations and
CollectionUtils implementations, with the collections interfaces and
CollectionUtils code deprecated in favour of the functor ones.
+ all functor code is together, all collections code is together. Tight
scope
+ [collections] does not depend on [lang]
+ [functor does not depend on [collections], which is better for [io] etc.
- [functor] depends on [lang]
- Functor users, like [io], need to depend on [functor] and [lang]
- Causes problems if [lang] wants to use a functor

Solution #4  (Tried and failed)
[pattern] project that contains the functor interfaces and implementations
This failed because:
a) [collections] was asked to depend on [pattern] and [lang]
b) [pattern] was too braodly scoped
c) [pattern] was badly named

Solution #5  (Included, for completeness)
Duplicate the functor implementations in [lang] and [collections]
- This sucks


#1 is the simplest choice, but messes up other projects who want to use
functors without collections

#2 is a simple choice, but requires [collections] to depend on [lang] and
people to be comfortable the functors should be in [lang].

#3 requires more initial effort, but does result in more tightly defined
components.

I am prepared to implement #1, #2 or #3 to get this sorted finally. Or are
there any other options I haven't thought of?

Stephen




--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to