
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.miljenovic@gmail.com> wrote:
On 16 August 2013 11:35, AntC
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.Miljenovic@gmail.com http://IvanMiljenovic.wordpress.com
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe