>>> take 1 (transpose ['a' : undefined, 'b' : undefined]) ["ab"]
>>> transpose [[1,2,3],[4,5,6]] [[1,4],[2,5],[3,6]]If some of the rows are shorter than the following rows, their elements are skipped:
>>> transpose [[10,11],[20],[],[30,31,32]] [[10,20,30],[11,31],[32]]For this reason the outer list must be finite; otherwise transpose hangs:
>>> transpose (repeat []) * Hangs forever *
>>> transpose [[1,2,3],[4,5,6]] [[1,4],[2,5],[3,6]]If some of the rows are shorter than the following rows, their elements are skipped:
>>> transpose [[10,11],[20],[],[30,31,32]] [[10,20,30],[11,31],[32]]
>>> transpose [[1,2,3],[4,5,6]] [[1,4],[2,5],[3,6]]If some of the rows are shorter than the following rows, their elements are skipped:
>>> transpose [[10,11],[20],[],[30,31,32]] [[10,20,30],[11,31],[32]]For this reason the outer list must be finite; otherwise transpose hangs:
>>> transpose (repeat []) * Hangs forever *
delay [xs, ys, zs, ... ] = [[], xs, ys, zs, ...]
delay [[x,...], [y,...], ...] = [[], [x,...], [y,...], ...]Typically used when defining Listable instances:
instance Listable <Type> where tiers = ... \/ delay (cons<N> <Constructor>) \/ ...
reset [[], [], ..., xs, ys, zs, ...] = [xs, ys, zs, ...]
reset [[], xs, ys, zs, ...] = [xs, ys, zs, ...]
reset [[], [], ..., [x], [y], [z], ...] = [[x], [y], [z], ...]Typically used when defining Listable instances:
instance Listable <Type> where tiers = ... \/ reset (cons<N> <Constructor>) \/ ...Be careful: do not apply reset to recursive data structure constructors. In general this will make the list of size 0 infinite, breaking the tiers invariant (each tier must be finite).
normalizeT [xs0,xs1,...,xsN,[]] = [xs0,xs1,...,xsN] normalizeT [xs0,xs1,...,xsN,[],[]] = [xs0,xs1,...,xsN]The arbitrary limit of 12 tiers is necessary as this function would loop if there is an infinite trail of empty tiers.
>>> 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
>>> 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