Frank Buss schrieb:
Is it possible to write a function like this:
zipn n list_1 list_2 list_3 ... list_n
which implements zip3 for n=3, zip4 for n=4 etc.? Looks like variable number
of arguments are possible, like printf shows, so a general zipn should be
possible, too. If it is possible, why there are functions like zip5 and not
just zipn?
What type would this function have? It's not possible to formulate this
type in Haskell98. The problem is that the number of arguments cannot be
determined statically, i.e. it depends on the value of n at run-time.
There are languages more freaky than Haskell (like Agda or Epigram )
that can do that (without dynamic typing, that is!), they are called
"dependently typed".
However, type-class hackery (or type synonym families once they're
available in GHC) can be used to do something like that if you give the
value of n at compile-time. I won't dwell into that, though.
Also, applicative functors can help
GHCi> :m +Control.Applicative
GHCi> (\x y z -> x*(y+z)) <$> ZipList [1,2,3]
<*> ZipList [-1,0,1] <*> ZipList [1,1,1]
ZipList [0,2,6]
GHCi>
(the second command is a single line.)
Regards,
apfelmus
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe