Moje pytanie dotyczy funkcji w Prelude
sequence
, podpis, który przedstawia się następująco:Dlaczego zastosowanie "sekwencji" na liście list prowadzi do obliczenia jej produktu kartezjańskiego?
sequence :: Monad m => [m a] -> m [a]
rozumiem, jak ta funkcja działa dla List
z Maybe
s. Na przykład zastosowanie sequence
na [Just 3, Just 9]
daje Just [3, 9]
.
Zauważyłem, że zastosowanie sequence
na List
z List
s daje jej produkt kartezjański. Czy ktoś może mi pomóc zrozumieć, jak/dlaczego tak się dzieje?
BTW, ostatni termin jest dokładnie taki sam, jak odpowiednie wyrażenie-rozumienie listy [[x, y] | x <- [1,2], y <- [3,4]] - może to wyjaśnia, że daje on produkt kartezjański. – phynfo