bisequence ≡ bitraverse id id
>>> bisequence (Just 4, Nothing) Nothing
>>> bisequence (Just 4, Just 5) Just (4,5)
>>> bisequence ([1, 2, 3], [4, 5]) [(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)]
>>> bisequence_ (print "Hello", print "World") "Hello" "World"
>>> bisequence_ (Left (print "Hello")) "Hello"
>>> bisequence_ (Right (print "World")) "World"
>>> sequence $ Right [1,2,3,4] [Right 1,Right 2,Right 3,Right 4]
>>> sequence $ [Right 1,Right 2,Right 3,Right 4] Right [1,2,3,4]The following examples demonstrate short circuit behavior for sequence.
>>> sequence $ Left [1,2,3,4] Left [1,2,3,4]
>>> sequence $ [Left 0, Right 1,Right 2,Right 3,Right 4] Left 0
>>> sequenceA [Just 1, Just 2, Just 3] Just [1,2,3]
>>> sequenceA [Right 1, Right 2, Right 3] Right [1,2,3]The next two example show Nothing and Just will short circuit the resulting structure if present in the input. For more context, check the Traversable instances for Either and Maybe.
>>> sequenceA [Just 1, Just 2, Just 3, Nothing] Nothing
>>> sequenceA [Right 1, Right 2, Right 3, Left 4] Left 4
>>> sequenceA_ [print "Hello", print "world", print "!"] "Hello" "world" "!"
>>> take 1 (subsequences undefined) [[]] >>> take 2 (subsequences ('a' : undefined)) ["","a"]
>>> subsequences "abc" ["","a","b","ab","c","ac","bc","abc"]This function is productive on infinite inputs:
>>> take 8 $ subsequences ['a'..] ["","a","b","ab","c","ac","bc","abc"]