[Haskell-cafe] Re: howto tuple fold to do n-ary cross product?

Larry Evans cppljevans at suddenlink.net
Sun Nov 23 23:43:42 EST 2008

On 11/23/08 13:52, Luke Palmer wrote:
> 2008/11/23 Larry Evans <cppljevans at suddenlink.net>:
>> http://www.muitovar.com/monad/moncow.xhtml#list
>> contains a cross function which calculates the cross product
>> of two lists.  That attached does the same but then
>> used cross on 3 lists.  Naturally, I thought use of
>> fold could generalize that to n lists; however,
>> I'm getting error:
> You should try writing this yourself, it would be a good exercise.  To
> begin with, you can mimic the structure of cross in that tutorial, but
> make it recursive.  After you have a recursive version, you might try
> switching to fold or foldM.

Thanks.  The recursive method worked with:
crossr::[[a]] -> [[a]]

crossr lls = case lls of
   { []      -> []
   ; [hd]    -> map return hd
   ; hd:tail -> concat (map (\h ->map (\t -> h:t) (crossr tail)) hd)

However, I'm not sure fold will work because fold (or rather foldr1)

has signature:


and in the cross product case, a is [a1]; so, the signature would be


but what's needed as the final result is [[a1]].

Am I missing something?


More information about the Haskell-Cafe mailing list