首页 > 编程语言 > 详细

[Javascript] Either Functor

时间:2016-09-08 06:15:24      阅读:346      评论:0      收藏:0      [点我收藏+]

Either Functor:

// API

Right(val) // resolve the value

Left(val) // return error message

 

Examples:

map(function(x) { return x + 1; }, Right(2))
//=> Right(3)

map(function(x) { return x + 1; }, Left(‘some message))
//=> Left(‘some message’)
var determineAge = function(user){
  return user.age ? Right(user.age) : Left("couldn’t get age");
}
var yearOlder = compose(map(add(1)), determineAge)

yearOlder({age: 22})
//=> Right(23)

yearOlder({age: null})
//=> Left("couldn’t get age")

 

var _ = R;
var P = PointFree;
var map = P.fmap;
var compose = P.compose;
var Maybe = P.Maybe;
var Identity = P.Id;

var Either = folktale.data.Either;
var Left = Either.Left;
var Right = Either.Right;


// Exercise 1
// ==========
// Write a function that uses checkActive() and showWelcome() to grant access or return the error
console.log("--------Start exercise 1--------")

var showWelcome = compose(_.add( "Welcome "), _.get(name))

var checkActive = function(user) {
 return user.active ? Right(user) : Left(Your account is not active)
}

var ex1 = compose(map(showWelcome), checkActive);

assertDeepEqual(Left(Your account is not active), ex1({active: false, name: Gary}))
assertDeepEqual(Right(Welcome Theresa), ex1({active: true, name: Theresa}))
console.log("exercise 1...ok!")



// Exercise 2
// ==========
// Write a validation function that checks for a length > 3. It should return Right(x) if it is greater than 3 and Left("You need > 3") otherwise
console.log("--------Start exercise 2--------")

var ex2 = function(x) {
  if(x){
    return x.length > 3 ? 
        Right(x) : 
        Left("You need > 3");
  }else{
    return Left("You need > 3");
  }
}


assertDeepEqual(Right("fpguy99"), ex2("fpguy99"))
assertDeepEqual(Left("You need > 3"), ex2("..."))
console.log("exercise 2...ok!")





// Exercise 3
// ==========
// Use ex2 above and Either as a functor to save the user if they are valid

var save = function(x){ console.log("SAVED USER!"); return x; }

var ex3 = compose( map(save), ex2)

console.log("--------Start exercise 3--------")
assertDeepEqual(Right("fpguy99"), ex3("fpguy99"))
assertDeepEqual(Left("You need > 3"), ex3("duh"))
console.log("exercise 3...ok!")

 

[Javascript] Either Functor

原文:http://www.cnblogs.com/Answer1215/p/5851666.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!