Skip to content

Instantly share code, notes, and snippets.

@leroix
Created May 21, 2015 20:02
Show Gist options
  • Save leroix/8e2d9b4c6ed74ca3c43f to your computer and use it in GitHub Desktop.
Save leroix/8e2d9b4c6ed74ca3c43f to your computer and use it in GitHub Desktop.
var fs = require('fs')
var Either = require('fantasy-eithers')
var Option = require('fantasy-options')
var Promise = require('fantasy-promises')
var EitherT = Either.EitherT
var OptionT = Option.OptionT
var EitherPromise = EitherT(Promise)
var OptionEitherPromise = OptionT(EitherT(Promise))
var identity = function (x) { return x }
var read = function (filename) {
return new Promise(function (resolve) {
fs.readFile(filename, function (err, data) {
//return resolve(err ? Either.Left(err) : Either.Right(Option.Some(data.toString())))
return resolve(err ? Either.Left(err) : Either.Right(filename === 'tst.js' ? Option.None : Option.Some(data.toString())))
})
})
}
var take100 = function (data) {
return data.slice(0,100)
}
var lifted_read = function (filename) {
return OptionEitherPromise(EitherPromise(read(filename)))
}
var on_error = function (err) {
console.log('Can\'t we just not have errors?')
console.error(err)
}
var on_success = function (data) {
console.log(data)
}
lifted_read('tst.js')
.map(take100)
.orElse(lifted_read('tst2.js'))
.getOrElse('no diggity')
.fold(on_error, on_success)
.fork(identity)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment