For the "consistency" you want, `data Oneple a = T a` is the best you can do in Haskell.
T(CustId 47) is just one character off from what you actually want to write: (Cust 47). And I presume you want the "extra bottom" that comes with this, as opposed to just treating values as their own one-tuples. I imagine you could write some fancy hack that uses the type system to automatically promote values to Oneples of the given value when an "expected: Oneple Foo, actual: Foo" error occurs. But this would not be very useful in general. An uglier option: type Oneple a = (a, ()) -- Dan Burton On Thu, Aug 15, 2013 at 7:05 PM, Ivan Lazar Miljenovic < ivan.miljeno...@gmail.com> wrote: > On 16 August 2013 11:35, AntC <anthony_clay...@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 > > > > (That is, it's annoying if you're trying to make typeclass instances for > > extensible/contractable tuples. Yes, I know I could use HLists.) > > > > I'm not happy with either approach I've tried: > > > > data Oneple a = Oneple a -- (or newtype) > > (Oneple $ CustId 47) -- too verbose > > > > type Oneple a = [a] > > [CustId 47] -- at least looks bracket-y > > > > What do you do? > > http://hackage.haskell.org/package/OneTuple :p > > If you really wanted some form of parentheses you could possibly use > quasiquoting for it... > > > > > AntC > > > > > > > > _______________________________________________ > > Haskell-Cafe mailing list > > Haskell-Cafe@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-cafe > > > > -- > Ivan Lazar Miljenovic > ivan.miljeno...@gmail.com > http://IvanMiljenovic.wordpress.com > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe