首页 > 代码库 > [Javascript] Either Functor

[Javascript] Either Functor

Either Functor:

// APIRight(val) // resolve the valueLeft(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 errorconsole.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") otherwiseconsole.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 validvar 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