Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script src="https://rawgit.com/CrossEye/eweda/master/eweda.js"></script>
</head>
<body>
</body>
</html>
 
eweda.installTo(this);
var Monad = function(type, defs) {
  for (name in defs){
    type.prototype[name] = defs[name];
  }
  return type;
};
function Left(value){
  this.value = value  
}
function Right(value){
  this.value=value;
}
Monad(Right, {
  bind:function(fn){
    return fn(this.value)
  }
})
Monad(Left, {
  bind: function(fn){
    return this;
  }
})
var land = eweda.curry(function(lr, n, pole){
    pole[lr] = pole[lr] + n;
    if(Math.abs(pole[0]-pole[1]) > 3) {
      return new Left("dead when land " + n + " became " + pole);
    } 
    return new Right(pole);
});
var landLeft = land(0)
var landRight = land(1);
var either = function(leftfn, rightfn, eth){
  if(eth.constructor.name === 'Left'){
    return leftfn(eth.value)
  }else if(eth.constructor.name === 'Right') {
    return rightfn(eth.value)
  }    
}
var stillAlive = function(x){
    console.log(x)
}
var dead = function(x){
    console.log('皮尔斯' + x);
}
// either(dead, stillAlive, landLeft(2, [0,0]));
var walkInLine = new Right([0,0]);
eitherDeadOrNot = walkInLine.bind(landLeft(2))
either(dead, stillAlive, eitherDeadOrNot)
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
jcouyangpro
0viewers