@@ -38,16 +38,15 @@ similar to the answer to - "Where to use Haskell lists or the IO monad?".
3838Streamly simplifies streaming and makes it as intuitive as plain lists. Unlike
3939other streaming libraries, no fancy types are required. Streamly is simply a
4040generalization of Haskell lists to monadic streaming optionally with concurrent
41−composition. Streamly stream type can be considered as a list type
42−parameterized by a monad. For example, `SerialT IO a` is an equivalent of `[a]`
43−in the IO monad. A stream in an `Identity` monad, `SerialT Identity a`, is
44−equivalent to pure lists with equal or better performance. Streams are
45−constructed just like lists are constructed, using `nil` and `cons` instead of
46−`[]` and `:`. Unlike lists, streams can be constructed from monadic actions,
47−not just pure elements. Streams are processed just like lists are processed.
48−Streamly provides all the list combinators and more, but they are monadic and
49−work in a streaming fashion. In other words streamly just completes what lists
50−lack, you do not need to learn anything new.
41+composition. The basic stream type in streamly `SerialT m a` can be considered
42+as a list type `[a]` parameterized by the monad `m`. For example, `SerialT IO
43+a` is a moral equivalent of `[a]` in the IO monad. `SerialT Identity a`, is
44+equivalent to pure lists. Streams are constructed very much like lists, except
45+that they use `nil` and `cons` instead of `[]` and `:`. Unlike lists, streams
46+can be constructed from monadic effects, not just pure elements. Streams are
47+processed just like lists, with list like combinators, except that they are
48+monadic and work in a streaming fashion. In other words streamly just completes
49+what lists lack, you do not need to learn anything new.
5150
5251Not surprisingly, the monad instance of streamly is a list transformer, with
5352concurrency capability.