[Javascript] Other functor

EventStream:

You can use RxJS, BaconJS or any reactive programming lib you want:

var id_s = map(function(e) { return  '#'+e.id }, Bacon.fromEventTarget(document, "click"))
var element_s = map(document.querySelector, id_s)
//=> EventStream(Element)

element_s.onValue(function(el) { alert('The inner html is ' +el.innerHTML) })

Here using BaconJS; we need to call onValue to subscribe stream.

Future:

It is "lazy", you must fork it.

var makeHtml = function(post){ return "<div>"+post.title+"</div>"};
var page_f = map(makeHtml, http.get('/posts/2'))

page_f.fork(function(err) { throw(err) },
                function(page){ $('#container').html(page) })
console.clear();
var _ = R;
var P = PointFree;
var map = P.fmap;
var compose = P.compose;
var Maybe = P.Maybe;
var Identity = P.Id;






// Exercise 1
// ==========
// Use _.add(x,y) and map(f,x) to make a function that increments a value inside a functor
console.log("--------Start exercise 1--------")

var ex1 = map(_.add(1))


assertDeepEqual(Identity(3), ex1(Identity(2)))
console.log("exercise 1...ok!")





// Exercise 2
// ==========
// Use _.head to get the first element of the list
var xs = Identity(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
console.log("--------Start exercise 2--------")


var ex2 = map(_.head);


assertDeepEqual(Identity('do'), ex2(xs))
console.log("exercise 2...ok!")






// Exercise 3
// ==========
// Use safeGet and _.head to find the first initial of the user
var safeGet = _.curry(function(x,o){ return Maybe(o[x]) })
var user = {id: 2, name: "Albert"}
console.log("--------Start exercise 3--------")

var ex3 = compose(map(_.head), safeGet('name'));


assertDeepEqual(Maybe('A'), ex3(user))
console.log("exercise 3...ok!")






// Exercise 4
// ==========
// Use Maybe to rewrite ex4 without an if statement
console.log("--------Start exercise 4--------")

var ex4 = function(n) {
  if(n){
    return parseInt(n);
  }
}


var ex4 = compose(map(parseInt),Maybe)


assertDeepEqual(Maybe(4), ex4("4"))
console.log("exercise 4...ok!")














// TEST HELPERS
// =====================
function inspectIt(x){
  return (x.inspect && x.inspect()) || (x.toString && x.toString()) || x.valueOf(); //hacky for teachy.
}

function assertEqual(x,y){
  if(x !== y){ throw("expected "+x+" to equal "+y); }
}
function assertDeepEqual(x,y){
  if(x.val !== y.val) throw("expected "+inspectIt(x)+" to equal "+inspectIt(y));
}
原文地址:https://www.cnblogs.com/Answer1215/p/5862639.html