commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Benson <gudnabr...@gmail.com>
Subject Re: [functor] Change default arity of Function, Predicate and Procedure
Date Tue, 12 Feb 2013 15:08:57 GMT
Hi Benedikt,
  So what you are pointing out is the "is a" vs. "has a" dichotomy?  To an
extent, I see your point.  I could argue that the semantics of the word
"implements" perhaps leaves a bit of so-called wiggle room on the is a/has
a subject.  This could devolve into a long discussion of the most
semantically correct place to use "implements Arity*" vs. "extends Arity*"
throughout the API, but the final result, IMO, is that the intent of any
given concrete class is clear enough, and Arity|Nullary|Unary|Binary|ad
infinitum seems more convenient than e.g. "SomethingThatHasArity", etc.

Does that make sense?

Matt


On Tue, Feb 12, 2013 at 7:29 AM, Benedikt Ritter <britter@apache.org> wrote:

> Hi Guys,
>
> I've had a look at the github repo and let me say at first that I'm no
> expert in functional programming. So maybe what I'm talking is complete
> nonsense :)
>
> From what I learned about the concept of arity at wikipedia it seems that
> an arity is a property of a functor.
> One could say: "A binary functor has an arity of two" (right?!)
>
> In the github repo you introduced an inheritance relationship between
> functors and arity.
> This maybe a good thing to do from a pracmatic POV because all functors
> share the fact that say have an arity.
>
> From an object oriented POV inheritance is more then pure reuse. When
> defining an inheritance relationship between concept Super and concept Sub
> we basically say "Every instance of Sub is also an instance of Super" or
> short "Every Sub is also a Super"
>
> Now coming back to functors you have introduced a relationship that says
> "Every BinaryFunction is a Binary and every Binary is an Arity".
> Keeping in mind that arity is only a property of a functor (rather than a
> superset) this seems strange (from an OO POV).
> But as I'm no expert on functional programming this maybe the right thing
> to do... :)
>
> just my 2 cents :)
> Benedikt
>
>
>
> 2013/2/11 Bruno P. Kinoshita <kinow@apache.org>
>
> > Hi Matt!
> >
> > Great! I'll commit these changes tomorrow if there are no objections.
> >
> > Thanks!
> >
> > Bruno P. Kinoshita
> > http://kinoshita.eti.br
> > http://tupilabs.com
> >
> >
> > ----- Original Message -----
> > > From: Matt Benson <gudnabrsam@gmail.com>
> > > To: Commons Developers List <dev@commons.apache.org>
> > > Cc:
> > > Sent: Monday, February 11, 2013 8:39 PM
> > > Subject: Re: [functor] Change default arity of Function, Predicate and
> > Procedure
> > >
> > > Hi Bruno,
> > >   No objections here about the Arity interfaces.  I see that your
> master
> > > branch also contains changes to migrate Unary* to * and * to Nullary*.
> > > Personally I am satisfied to align with lambda/guava if noone else
> > objects.
> > >
> > > Thanks,
> > > Matt
> > >
> > >
> > > On Mon, Feb 11, 2013 at 4:25 PM, Bruno P. Kinoshita <
> > > brunodepaulak@yahoo.com.br> wrote:
> > >
> > >>  Hi Matt, all,
> > >>
> > >>  I'm messing with [functor] in my GitHub mirror [1]. You can find the
> > >>  commits in the master branch [2].
> > >>
> > >>  The Arity->Unary/Binary/Nullary interfaces look good. If there are
no
> > >>  objections I would like to commit this change to the trunk in SVN.
> > >>
> > >>  There are other changes that I'll omit in this commit, but will start
> > > new
> > >>  threads here in the mailing list :o)
> > >>
> > >>  Thank you in advance!
> > >>
> > >>  [1] https://github.com/kinow/functor
> > >>  [2] https://github.com/kinow/functor/commits/master
> > >>
> > >>  Bruno P. Kinoshita
> > >>  http://kinoshita.eti.br
> > >>  http://tupilabs.com
> > >>
> > >>
> > >>  >________________________________
> > >>  > From: Bruno P. Kinoshita <kinow@apache.org>
> > >>  >To: Commons Developers List <dev@commons.apache.org>; "
> > >>  gudnabrsam@gmail.com" <gudnabrsam@gmail.com>
> > >>  >Sent: Wednesday, January 30, 2013 3:58 PM
> > >>  >Subject: Re: [functor] Change default arity of Function, Predicate
> and
> > >>  Procedure
> > >>  >
> > >>  >I think it makes sense and is clear what is does.
> > >>  >
> > >>  >I thought in using {arity}Operation, but in Java 8 there are
> > interfaces
> > >>  like BinaryOperator, and BinaryOperator extends BiFunction, so it
> > would be
> > >>  confusing to users having something like interface BinaryFunction
> > extends
> > >>  BinaryOperation in [functor].
> > >>  >
> > >>  >Bruno P. Kinoshita
> > >>  >http://kinoshita.eti.br
> > >>  >http://tupilabs.com
> > >>  >
> > >>  >
> > >>  >----- Original Message -----
> > >>  >> From: Matt Benson <gudnabrsam@gmail.com>
> > >>  >> To: Bruno P. Kinoshita <brunodepaulak@yahoo.com.br>
> > >>  >> Cc: Commons Developers List <dev@commons.apache.org>
> > >>  >> Sent: Wednesday, January 30, 2013 1:29 PM
> > >>  >> Subject: Re: [functor] Change default arity of Function, Predicate
> > > and
> > >>  Procedure
> > >>  >>
> > >>  >> What about:
> > >>  >>
> > >>  >> Arity (Marker)
> > >>  >> |_Nullary extends Arity
> > >>  >> |_Unary<A> extends Arity
> > >>  >> |_Binary<L, R> extends Arity
> > >>  >>
> > >>  >> ?
> > >>  >>
> > >>  >> Matt
> > >>  >>
> > >>  >>
> > >>  >> On Tue, Jan 29, 2013 at 6:09 PM, Bruno P. Kinoshita <
> > >>  >> brunodepaulak@yahoo.com.br> wrote:
> > >>  >>
> > >>  >>>  In Haskell you define your functions and its arity.
> > >>  >>>
> > >>  >>>  // nullary function
> > >>  >>>  a :: () => () -> String
> > >>  >>>  a = "Hello World"
> > >>  >>>
> > >>  >>>  // unary function
> > >>  >>>  b :: (Integral c) => c -: String
> > >>  >>>  b x = "Hello Integral"
> > >>  >>>
> > >>  >>>  I think in Clojure and Scala you can define the arity of
the
> > > function
> > >>  too.
> > >>  >>>
> > >>  >>>  For the users of [functor] I think it would be easier to
> > > migrate their
> > >>  >>>  code to Java 8, or use it with Java 8, if both [functor]
and
> > > Java 8
> > >>  >>>  Function classes had similar behaviour. That would be
> > > interesting
> > >>  >>>  especially if the lambda project provided a backport jar.
> > >>  >>>
> > >>  >>>  [functor] and lambda project provide 1 and 2 arities by
> > > default, but
> > >>  >>>  lambda doesn't provide nullary interfaces (or at least I
> > > couldn't
> > >>  >> find them
> > >>  >>>  in java.util.functions).
> > >>  >>>
> > >>  >>>  Cheers
> > >>  >>>
> > >>  >>>  Bruno P. Kinoshita
> > >>  >>>  http://kinoshita.eti.br
> > >>  >>>  http://tupilabs.com
> > >>  >>>
> > >>  >>>
> > >>  >>>  ----- Original Message -----
> > >>  >>>  > From: Matt Benson <gudnabrsam@gmail.com>
> > >>  >>>  > To: Commons Developers List
> > > <dev@commons.apache.org>; Bruno P.
> > >>  >>>  Kinoshita <brunodepaulak@yahoo.com.br>
> > >>  >>>  > Cc:
> > >>  >>>  > Sent: Tuesday, January 29, 2013 8:57 PM
> > >>  >>>  > Subject: Re: [functor] Change default arity of Function,
> > > Predicate
> > >>  and
> > >>  >>>  Procedure
> > >>  >>>  >
> > >>  >>>  > What about in pure functional languages e.g. Haskell?
> > >>  >>>  >
> > >>  >>>  > Matt
> > >>  >>>  >
> > >>  >>>  >
> > >>  >>>  > On Tue, Jan 29, 2013 at 4:55 PM, Bruno P. Kinoshita
<
> > >>  >>>  > brunodepaulak@yahoo.com.br> wrote:
> > >>  >>>  >
> > >>  >>>  >>  Hi all,
> > >>  >>>  >>
> > >>  >>>  >>  In Java 8 and Guava the default arity of a Function
> > > is 1, but in
> > >>  >>>  [functor]
> > >>  >>>  >>  it is 0, IOW, in Java 8 and Guava a Function is
by
> > > default a
> > >>  >>>  UnaryFunction,
> > >>  >>>  >>  while in [functor] it is a NullaryFunction.
> > >>  >>>  >>
> > >>  >>>  >>  What do you guys think of changing the default
> > > arity of Function,
> > >>  >>>  >>  Procedure and Predicate in [functor] to 1, rather
> > > than 0?
> > >>  >>>  >>
> > >>  >>>  >>  Cheers
> > >>  >>>  >>
> > >>  >>>  >>  Bruno P. Kinoshita
> > >>  >>>  >>  http://kinoshita.eti.br
> > >>  >>>  >>  http://tupilabs.com
> > >>  >>>  >>
> > >>  >>>  >>
> > >>  >>
> > > ---------------------------------------------------------------------
> > >>  >>>  >>  To unsubscribe, e-mail:
> > > dev-unsubscribe@commons.apache.org
> > >>  >>>  >>  For additional commands, e-mail:
> > > dev-help@commons.apache.org
> > >>  >>>  >>
> > >>  >>>  >>
> > >>  >>>  >
> > >>  >>>
> > >>  >>
> > >>  >
> > >>
>  >---------------------------------------------------------------------
> > >>  >To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > >>  >For additional commands, e-mail: dev-help@commons.apache.org
> > >>  >
> > >>  >
> > >>  >
> > >>  >
> > >>
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> >
>
>
> --
> http://people.apache.org/~britter/
> http://www.systemoutprintln.de/
> http://twitter.com/BenediktRitter
> http://github.com/britter
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message