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!")