node package manager
Stop wasting time. Easily manage code sharing in your team. Create a free org »



Some notes:

  • pull-style lazy sequences
  • a set of combinators for them
  • modelled after clojure/reducers
  • plays well with arrays, promises and other monads (theoretically)
  • see specs for docs

Brief example:

{equal} = require 'assert'
{fold, take, repeat, reduced} = require 'reduced'

# compute a sum of a seq
sum = (seq) ->
  fold(seq, ((v, s) -> v + s), 0)

# sum of a hundred of 1s
sum100 = sum(take repeat(1), 100)

reduced(sum100).then (v) ->
  equal v, 100

reduced is a parametrized module (functor)

You can use reduced with other types of monads — there's makeModule function which created another instance of reduced module.

var reducedForStreams = reduced.makeModule(function(stream) {
  // make seq from a stream

That way reducedForStreams would have exactly the same function available as original reduce module but those functions will work only on streams.