[Haskell-beginners] Comments on Map/Reduce Code

Brent Yorgey byorgey at seas.upenn.edu
Tue Jul 17 15:28:02 CEST 2012


On Tue, Jul 17, 2012 at 03:01:39PM +0200, Thomas Bach wrote:
> On Sat, Jul 14, 2012 at 08:35:44PM -0400, Brent Yorgey wrote:
> > On Fri, Jul 13, 2012 at 06:02:02PM +0200, Thomas Bach wrote:
> > 
> > > The reducer still throws an error when piping in an empty
> > > newline. But, I'm not sure, what a proper solution for this could be.
> > 
> > The problem is your 'summation' function:
> > 
> >   summation :: Num b => [(a, b)] -> (a, b)
> > 
> > In fact, it is impossible to implement something with this type which
> > works for all inputs.  If you get the empty list as input, there is no
> > way to make up a value of type 'a' in the output tuple.
> > 
> 
> It really is not that big of a deal. As I'd assume that Hadoop
> guarantees that at least one line will be passed to the reducer. But,
> just out of curiosity: wouldn't this be a case where monads are
> applied? Say, `Maybe'? So that the type becomes
> 
> summation :: Num b => [(a, b)] -> Maybe (a, b)

Yes, wrapping the return type in Maybe could be a good idea indeed.
You say "wouldn't this be a case where monads are applied", but you
are jumping too far ahead: using Maybe in this way is a good idea no
matter whether you happen to know that Maybe is an instance of Monad
or not.  Likewise, you could work with a function of this type without
using the Monad interface at all.  Using the Monad interface might
simplify some of the code but it is by no means required.

-Brent



More information about the Beginners mailing list