码迷,mamicode.com
首页 > 编程语言 > 详细

[Javascript] Either Functor

时间:2016-09-08 06:16:48      阅读:215      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!