[Haskell-cafe] One-element tuple
AntC
anthony_clayden at clear.net.nz
Tue Aug 20 03:07:18 CEST 2013
> 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.)
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.
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
More information about the Haskell-Cafe
mailing list