Haskell Foldable Wats
Simon Peyton Jones
simonpj at microsoft.com
Wed Feb 24 09:04:49 UTC 2016
| So, my advice is to use tuples only for very short-lived data, like
| returning multiple results from a function.
I strongly agree, for all the reasons Andreas mentions. GHC's source code has *lots* of data types that are isomorphic to tuples. Crucial!
Simon
| -----Original Message-----
| From: Libraries [mailto:libraries-bounces at haskell.org] On Behalf Of
| Andreas Abel
| Sent: 24 February 2016 08:58
| To: Nathan Bouscal <nbouscal at gmail.com>; libraries at haskell.org
| Subject: Re: Haskell Foldable Wats
|
| 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>
| >
| >
| https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.h
| > askell.org%2fcgi-
| bin%2fmailman%2flistinfo%2flibraries&data=01%7c01%7cs
| >
| imonpj%40064d.mgd.microsoft.com%7ce4033ee9a03a42eaa97108d33cf89187%7c7
| >
| 2f988bf86f141af91ab2d7cd011db47%7c1&sdata=hgiQqaz1dUG2aUrmeYETcy6loEMf
| > xosR3yBA09CQaZs%3d
| >
| >
| >
| >
| > _______________________________________________
| > Libraries mailing list
| > Libraries at haskell.org
| >
| https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.h
| > askell.org%2fcgi-
| bin%2fmailman%2flistinfo%2flibraries&data=01%7c01%7cs
| >
| imonpj%40064d.mgd.microsoft.com%7ce4033ee9a03a42eaa97108d33cf89187%7c7
| >
| 2f988bf86f141af91ab2d7cd011db47%7c1&sdata=hgiQqaz1dUG2aUrmeYETcy6loEMf
| > xosR3yBA09CQaZs%3d
| >
|
|
| --
| Andreas Abel <>< Du bist der geliebte Mensch.
|
| Department of Computer Science and Engineering Chalmers and Gothenburg
| University, Sweden
|
| andreas.abel at gu.se
| https://na01.safelinks.protection.outlook.com/?url=http:%2f%2fwww2.tcs.
| ifi.lmu.de%2f~abel%2f&data=01%7C01%7Csimonpj%40064d.mgd.microsoft.com%7
| Ce4033ee9a03a42eaa97108d33cf89187%7C72f988bf86f141af91ab2d7cd011db47%7C
| 1&sdata=kvwlaXofxhQV2ZCD9K%2bemtG4S9oCujNYhn1IXTnSZtc%3d
| _______________________________________________
| Libraries mailing list
| Libraries at haskell.org
| https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.ha
| skell.org%2fcgi-
| bin%2fmailman%2flistinfo%2flibraries%0a&data=01%7c01%7csimonpj%40064d.m
| gd.microsoft.com%7ce4033ee9a03a42eaa97108d33cf89187%7c72f988bf86f141af9
| 1ab2d7cd011db47%7c1&sdata=gMTA2SOTm1seAHbvHPWnsDjAa7y1gAS681kW6YUx1mQ%3
| d
More information about the Libraries
mailing list