Copyright | (C) 2011 Edward Kmett |
---|---|

License | BSD-style (see the file LICENSE) |

Maintainer | Edward Kmett <ekmett@gmail.com> |

Stability | provisional |

Portability | portable |

Safe Haskell | Trustworthy |

Language | Haskell98 |

Anticausal streams implemented as non-empty skew binary random access lists

The Applicative zips streams, the monad diagonalizes

- data Stream a
- (<|) :: a -> Stream a -> Stream a
- (!!) :: Stream a -> Integer -> a
- tail :: Stream a -> Stream a
- uncons :: Stream a -> (a, Stream a)
- drop :: Integer -> Stream a -> Stream a
- dropWhile :: (a -> Bool) -> Stream a -> Stream a
- span :: (a -> Bool) -> Stream a -> ([a], Stream a)
- break :: (a -> Bool) -> Stream a -> ([a], Stream a)
- split :: (a -> Bool) -> Stream a -> ([a], Stream a)
- splitW :: (Stream a -> Bool) -> Stream a -> ([a], Stream a)
- repeat :: a -> Stream a
- insert :: Ord a => a -> Stream a -> Stream a
- insertBy :: (a -> a -> Ordering) -> a -> Stream a -> Stream a
- adjust :: Integer -> (a -> a) -> Stream a -> Stream a
- update :: Integer -> a -> Stream a -> Stream a
- from :: Num a => a -> Stream a
- indexed :: Stream a -> Stream (Integer, a)
- interleave :: Stream a -> Stream a -> Stream a

# Documentation

split :: (a -> Bool) -> Stream a -> ([a], Stream a) Source #

*(O(n), O(log n))* split at _some_ edge where function goes from False to True.
best used with a monotonic function

splitW :: (Stream a -> Bool) -> Stream a -> ([a], Stream a) Source #

*(O(n), O(log n))* split at _some_ edge where function goes from False to True.
best used with a monotonic function

splitW p xs = (map extract &&& fmap (fmap extract)) . split p . duplicate

insertBy :: (a -> a -> Ordering) -> a -> Stream a -> Stream a Source #

*O(n)*. Finds the split in O(log n), but then has to recons