Monad transformer for Javascript arrays
npm install fantasy-arrayt
Promise = require \fantasy-promises
ArrayT = require \fantasy-arrayt
ArrayPromise = ArrayT Promise
a = new ArrayPromise new Promise (resolve)->
set-timeout resolve, 3000, [1 to 10]
a.map (* 5) .chain -> ArrayPromise Promise.of [it, -it]
.run.fork console.log # here be side-effects
# 3 seconds later...
#=> 5, -5, 10, -10, 15, -15,...type ArrayT m a = { run :: m [a] }Monad m => ArrayT m creates a monad encapsulating a list wrapped with the monad m.
map :: ArrayT m a → (a → b) → ArrayT m bchain :: ArrayT m a → (a → ArrayT m b) → ArrayT m bof :: a → ArrayT m aap :: ArrayT m (a → b) → ArrayT m a → ArrayT m bconcat :: ArrayT m a → ArrayT m a → ArrayT m aempty :: → ArrayT m areduce :: ArrayT m b → (a → b → a) → a → m breduceRight :: ArrayT m b → (a → b → a) → a → m btake :: ArrayT m a → Integer → ArrayT m atake :: ArrayT m a → Integer → ArrayT m adrop :: ArrayT m a → Integer → ArrayT m atail :: ArrayT m a → ArrayT m ahead :: ArrayT m a → m ainitial :: ArrayT m a → ArrayT m alast :: ArrayT m a → m areverse :: ArrayT m a → ArrayT m alen :: ArrayT m a → m Integerfilter :: ArrayT m a → (a → Boolean) → ArrayT m areject :: ArrayT m a → (a → Boolean) → ArrayT m afind :: ArrayT m a → (a → Boolean) → m amkString :: ArrayT m Stringable → m String(yay duck typing)every :: ArrayT m a → (a → Boolean) → m Booleansome :: ArrayT m a → (a → Boolean) → m Boolean
MIT. © 2013 Matt Brennan.
