[Haskell-cafe] One-element tuple
Ivan Lazar Miljenovic
ivan.miljenovic at gmail.com
Tue Aug 20 05:15:53 CEST 2013
On 20 August 2013 11:07, AntC <anthony_clayden at clear.net.nz> wrote:
>> Daniel F <difrumin <at> gmail.com> writes:
>>
>> Can you please elaborate why this inconsistency is annoying and what's
> the use of OneTuple?
>> Genuine question,
>
> Hi Daniel, the main annoyance is the verbosity (of using a data type and
> constructor), and that it no longer looks like a tuple.
>
> The inconsistency is because a one-element tuple is just as cromulent as a
> n-element, or a zero-element. (And that a one-element tuple is a distinct
> type from the element on its own/un-tupled.)
Why is it as "cromulent" (especially as I'm not so sure we could
really consider () to be merely a zero-element tuple)?
I can see what you're trying to do here, but for general usage isn't a
single element tuple isomorphic to just that element (which is what
newtypes are for if you need that distinction)?
>
> So if I have instances (as I do) like:
>
> instance C (a, b) ...
> instance C () ...
>
> I can't usefully put either of these next two, because they're equiv to
> the third:
>
> instance C (( a )) ...
> instance C ( a ) ...
> instance C a ... -- overlaps every instance
>
> Similarly for patterns and expressions, the so-called superfluous parens
> are just stripped away, so equivalent to the bare term.
>
> The use of OneTuple is that it comes with all Prelude instances pre-
> declared (just like all other tuple constructors). I don't see that it has
> an advantage over declaring your own data type(?) I'd also be interested
> to know who is using it, and why.
As far as I'm aware, it's just a joke package, but two packages
dealing with tuples seem to use it:
http://packdeps.haskellers.com/reverse/OneTuple
>
> What I'm doing is building Type-Indexed Tuples [1] mentioned in HList [2],
> as an approach to extensible records [3], on the model of Trex [4] -- all
> of which acknowledge one-element records/rows/tuples. And then I'm using
> the tuples as a platform for relational algebra [5] with natural Join (and
> ideas from Tropashko's 'Relational Lattice' [6]).
>
> Is there anybody using OneTuple 'in anger'?
>
> AntC
>
> [1] M. Shields and E.Meijer. Type-indexed rows. In Proceedings
> of the 28th ACM SIGPLAN-SIGACT symposium on Principles
> of Programming Languages, pages 261–275. ACMPress, 2001.
> [2] http://hackage.haskell.org/package/HList
> [3] http://www.haskell.org/haskellwiki/Extensible_record
> [4] http://web.cecs.pdx.edu/~mpj/pubs/polyrec.html
> [5] http://en.wikipedia.org/wiki/Relational_algebra#Natural_join_
> [6] http://vadimtropashko.wordpress.com/relational-lattice/
>
>>
>>
>>
>> On Fri, Aug 16, 2013 at 5:35 AM, AntC <anthony_clayden <at>
> clear.net.nz> wrote:
>> There's an annoying inconsistency:
>> (CustId 47, CustName "Fred", Gender Male) -- threeple
>> (CustId 47, CustName "Fred) -- twople
>> -- (CustId 47) -- oneple not!
>> () -- nople
>
>
>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
--
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
http://IvanMiljenovic.wordpress.com
More information about the Haskell-Cafe
mailing list