UNPKG

monadic_react

Version:

A monadic library for easily composing React-based libraries.

13 lines (10 loc) 584 B
export type Methods<A> = { map:<B>(f:(_:A)=>B)=>Option<B> } export type Option<A> = ({ kind:"none" } | { kind:"some", value:A }) & Methods<A> export let none = function<A>() : Option<A> { return { kind:"none", map:function<B>(this:Option<A>, f:(_:A)=>B){ return map<A,B>(f)(this) } } } export let some = function<A>(x:A) : Option<A> { return { kind:"some", value:x, map:function<B>(this:Option<A>, f:(_:A)=>B){ return map<A,B>(f)(this) } } } let map = function<A,B>(f:(_:A)=>B) : (x:Option<A>) => Option<B> { return x => x.kind == "none" ? none<B>() : some<B>(f(x.value)) }