Haskell Foldable Wats
Andreas Abel
abela at chalmers.se
Wed Feb 24 08:57:41 UTC 2016
In my n+1 years of participating in a 100kloc Haskell project, I learned
that programming with the "categorical" data type building blocks
"Either" and tuples leads to code that is hard to read and maintain. It
is tempting to use a pair
type QNamed a = (QName, a)
instead of a hand-rolled data type
data QNamed a = QNamed { qname :: QName, qnamedThing :: a }
since with pairs, I get lots of operations for free, and even more if I
use Functor and Traversable, it seems. However, in the long run, if I
come back after months to my original code, or even worse, to someone
else's code, I dearly pay for this:
1. Harder to read the code, as I may only see the non-telling "fst"
and "snd" instead of the semantics-loaden "qname" and "qnamedThing".
2. Lack of code exploration facilities like grep and tags. I can
grep for "QName" and "qname", but grepping for "," and "fst" returns
lots of irrelevant locations.
3. Non-telling error messages.
And all the arguments of using newtypes over type synonyms apply here as
well.
So, my advice is to use tuples only for very short-lived data, like
returning multiple results from a function. I am speaking here of
Haskell as a language for software development, not of Haskell as a
realization of category theory.
For getting a broader acceptance of Haskell as a language for software
development, Foldable on tuples is not helpful.
And yes, if I was new to Haskell and learned the GHCI thinks that
minimum (1,2) == 1
then I would advice GHCI to visit some mental institution to get its
delusions fixed.
--Andreas
On 23.02.2016 18:29, Nathan Bouscal wrote:
> Sorry, poor quoting on my part. I was attempting to reply to Andreas's
> earlier points:
>
> >> Use of tuples is highly discourageable…
>>>I see no point in Functor or Foldable for tuples.
>
> On Tue, Feb 23, 2016 at 5:18 PM, Mario Blažević <mblazevic at stilo.com
> <mailto:mblazevic at stilo.com>> wrote:
>
> On 16-02-23 11:23 AM, Nathan Bouscal wrote:
>
> It's a bit bold to simultaneously say "Nobody should use this
> type," and
> also "If you use this type, you should do it this way." If you think
> that it's bad practice to use tuples, that's a fine and respectable
> opinion, but at that point you should start being a bit more
> wary about
> telling those who think otherwise /how/ they should use them.
>
>
> I believe he was referring to lists, not to tuples. There
> were few Prelude functions limited to tuples before FTP, and those
> haven't changed.
>
>
>
> On Tue, Feb 23, 2016 at 1:10 PM, Marcin Mrotek
> <marcin.jan.mrotek at gmail.com
> <mailto:marcin.jan.mrotek at gmail.com>
> <mailto:marcin.jan.mrotek at gmail.com
> <mailto:marcin.jan.mrotek at gmail.com>>> wrote:
>
> > I can assure you that Andreas is not delusional
>
> I didn't say that. I was referring to his response to my
> post, that
> "Some delusions have very sophisticated explanations."
>
> > You have to show good taste or you'll end up with a mess
> that might be logically consistent, but unpleasant to use.
>
> This is entirely subjective, and frankly I don't think that
> post-FTP
> Haskell is a "mess" or is "unpleasant to use". If anything,
> it became
> more useful to me, because now Prelude functions aren't
> limited to the
> one data structure I almost never use.
>
> Best regards,
> Marcin Mrotek
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org <mailto:Libraries at haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
--
Andreas Abel <>< Du bist der geliebte Mensch.
Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden
andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/
More information about the Libraries
mailing list