On Sun, Oct 2, 2011 at 2:17 PM,  <sdiy...@sjtu.edu.cn> wrote:
> Finally I got what I meant:
>
>
> class ExpandTuple t where
>        type Result t
>        expand :: t->Result t
>
> instance (Integral a)=>ExpandTuple (a,a) where
>        type Result (a,a) = (a,a,a)
>        expand (x,y) = (x,y,1)
>
> instance (Integral a)=>ExpandTuple (a,a,a) where
>        type Result (a,a,a) = (a,a,a)
>        expand = id
>

If I were writing this sort of function, I would simply write:

> expand (x, y) = (x, y, 1)

and I would leave it at that. Since your 'expand' doesn't do anything
the three-tuples, I don't see why I would want to call the function
with a three-tuple argument.

But I don't know your full use case.

Antoine

> But it's so verbose (even more so than similar C++ template code I guess),
> introduces an additional name (the typeclass) into the current scope, and
> requires 2 extensions: TypeFamilies and FlexibleInstances.Is there a cleaner
> way to do this?
>
>
> _______________________________________________
> 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

Reply via email to