[Javascript] Either Functor
Posted Answer1215
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Javascript] Either Functor相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
将 Iterable[Either[A,B]] 减少为 Either[A, Iterable[B]]
如何将 Seq[Either[A,B]] 减少为 Either[A,Seq[B]]?
Arrow-kt:如何将 Either<E, List<Either<E,A>>> 变成 Either<E, List<B>>