Like Scala Monads for TypeScript and JavaScript
With Bower:
$ bower install git://github.com/yaakaito/monapt.git --save
var valueOption = map.get('key');
valueOption.getOrElse(() => 'defaultValue');valueOption.map(v => v * 2).filter(v => v > 10).match({
Some: v => console.log(v),
None: () => console.log('None!')
})new monapt.Some('value')
new monapt.None<string>()isEmpty: booleanget(): AgetOrElse(defaultValue: () => A): AorElse(alternative: () => Option<A>): Option<A>match(matcher: IOptionMatcher<A>): voidmap<B>(f: (value: A) => B): Option<B>flatMap<B>(f: (value: A) => Option<B>): Option<B>filter(predicate: (value: A) => boolean): Option<A>reject(predicate: (value: A) => boolean): Option<A>foreach(f: (value: A) => void): void
interface IOptionMatcher<A> {
Some?(value: A): void;
None?(): void;
}trier.match({
Success: v => console.log(v),
Failrue: e => console.log(e.message)
});var trier = monapt.Try(() => {
return parse(aValue);
});
trier.getOrElse(() => 'defaultValue');new monapt.Success('value')
new monapt.Failure<string>(new Error());isSuccess: booleanisFailure: booleanget(): TgetOrElse(defaultValue: () => T): TorElse(alternative: () => Try<T>): Try<T>match(matcher: ITryMatcher<T>)map<U>(f: (value: T) => U): Try<U>flatMap<U>(f: (value: T) => Try<U>): Try<U>filter(predicate: (value: T) => boolean): Try<T>reject(predicate: (value: T) => boolean): Try<T>foreach(f: (value: T) => void): voidrecover(fn: (error: Error) => T): Try<T>recoverWith(fn: (error: Error) => Try<T>): Try<T>
monapt.future<string>(promise => {
api.get((error, value) => {
if (error) {
promise.failure(error);
}
else {
promise.success(value);
}
});
}).onComplete({
Success: v => console.log(v),
Failure: e => console.log(e)
})Mix futures:
var macbook = monapt.future<string>(promise => {
setTimeout(() => {
promise.success('MacBook');
}, 100);
});
var pro = monapt.future<string>(promise => {
setTimeout(() => {
promise.success('Pro');
}, 100);
});
var macbookPro = macbook.flatMap<string>(mb => {
return pro.map<string>((pro, promise) => {
promise.success(mb + pro);
});
});
macbookPro.onSuccess(v => {
console.log(v); // MacBookPro
});onComplete(callback: ICompleteFucntion<T>): voidonSuccess(callback: (value: T) => void): voidonFailure(callback: (error: Error) => void): voidmap<U>(f: (value: T, promise: IFuturePromiseLike<U>) => void): Future<U>flatMap<U>(f: (value: T) => Future<U>): Future<U>filter(predicate: (value: T) => boolean): Future<T>reject(predicate: (value: T) => boolean): Future<T>recover(fn: (e: Error, promise: IFuturePromiseLike<T>) => T): Future<T>recoverWith(fn: (e: Error) => Future<T>): Future<T>
