[Haskell-cafe] One-element tuple

AntC anthony_clayden at clear.net.nz
Mon Aug 19 11:40:57 CEST 2013

> Brent Yorgey <byorgey <at> seas.upenn.edu> writes:
> > 
> >     data Oneple a = Oneple a                   -- (or newtype)
> >     (Oneple $ CustId 47)                       -- too verbose
> > 
> This is what the OneTuple package is for:

Thank you Brent, and Ivan made the same suggestion.

Apart from being more verbose (2 extra chars) than the approach I disliked 
as being too verbose, does OneTuple have any merit?

> Dan Burton danburton.email at gmail.com 
> Fri Aug 16 03:04:14 UTC 2013 
claims that 
> "T(CustId 47) is just one character off from what you actually want ..."

(Bare T is very likely to be used already.)

But not only do I want to construct Oneples, I also want to pattern match 
and discriminate on their type in instances:

    f (T(CustId x)) = ...

    instance C (Oneple (CustId Int)) ...

I'm sensing there must be a need (since OneTuple is claimed to be a 
solution for it).

Would double-parens be too wild an idea?:

    ... ((CustId 47)) `extend` (CustName "Fred", Gender Male)

    f ((CustId x)) = ...

    instance C ((CustId Int)) ...

We'd have to avoid the double parens as in:

    ((meth obj) (double x))

More information about the Haskell-Cafe mailing list