32 lines
877 B
JavaScript
32 lines
877 B
JavaScript
|
|
||
|
Elm.Either = function() {
|
||
|
function Left(a1) { return ['Left',a1]; }
|
||
|
function Right(a1){ return ['Right',a1]; }
|
||
|
function either(f){ return function(g){ return function(e){
|
||
|
switch(e[0]){
|
||
|
case 'Left': return f(e[1]);
|
||
|
case 'Right': return g(e[1]);
|
||
|
}
|
||
|
};};}
|
||
|
function isLeft(e) { return e[0] == 'Left'; }
|
||
|
function isRight(e) { return e[0] == 'Right'; }
|
||
|
|
||
|
function get(es) { return Elm.List.map(function(x){return x[1];})(es); }
|
||
|
function lefts(es) { return get(Elm.List.filter(isLeft)(es)); }
|
||
|
function rights(es) { return get(Elm.List.filter(isRight)(es)); }
|
||
|
function partition(es) {
|
||
|
var lrs = Elm.List.partition(isLeft)(es);
|
||
|
lrs[1] = get(lrs[1]);
|
||
|
lrs[2] = get(lrs[2]);
|
||
|
return lrs;
|
||
|
}
|
||
|
return {Left:Left,
|
||
|
Right:Right,
|
||
|
either:either,
|
||
|
isLeft:isLeft,
|
||
|
isRight:isRight,
|
||
|
lefts:lefts,
|
||
|
rights:rights,
|
||
|
partition:partition};
|
||
|
}();
|