[Haskell-beginners] Cartesian Product in Standard Haskell Libraries

Jay Sulzberger jays at panix.com
Mon Dec 24 19:42:08 CET 2012



On Mon, 24 Dec 2012, Chaddaï Fouché <chaddai.fouche at gmail.com> wrote:

> On Mon, Dec 24, 2012 at 8:01 AM, Jay Sulzberger <jays at panix.com> wrote:
>>
>>  > sequence []
>>   []
>>   it :: [()]
>>
>> This looks to me to be a violation of the rule that the Cartesian
>> product of an empty list of lists is a list with one element in
>> it.  It looks to be a violation because "[]" looks like a name
>> for an empty list.  But we also have
>>
>>  > length (sequence [])
>>   1
>>   it :: Int
>>
>> which almost reassures me.
>>
>
> Well the type of the first response is a dead give-away : the result
> is of type [()] but for a cartesian n-product, you would like [[a]]
> (with a maybe instantiated to a concrete type) ...
> What's happening here is that sequence is not "the cartesian
> n-product" in general, it is only that in the list monad but in
> "sequence []" there's nothing to indicate that we're in the list
> monad, so GHC default to the IO monad and unit () so sequence has the
> type "[IO ()] -> IO [()]" and there's no IO action in the list
> parameter, so there's nothing in the result list.
>
> Try :
>> sequence [] :: [[Int]]
> and you should be reassured.
>
> --
> Jedaï

Thanks, Chaddai Fouche!

I hope to post more in this thread.

oo--JS.



More information about the Beginners mailing list