ramda_compose.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. var classyGreeting = (firstName, lastName) =>
  2. "The name's " + lastName + ", " + firstName + " " + lastName;
  3. var yellGreeting = R.compose(R.toUpper, classyGreeting);
  4. yellGreeting("James", "Bond"); //=> "THE NAME'S BOND, JAMES BOND"
  5. R.compose(Math.abs, R.add(1), R.multiply(2))(-4); //=> 7
  6. // get :: String -> Object -> Maybe *
  7. var get = R.curry((propName, obj) => Maybe(obj[propName]));
  8. // getStateCode :: Maybe String -> Maybe String
  9. var getStateCode = R.composeK(
  10. R.compose(Maybe.of, R.toUpper),
  11. get("state"),
  12. get("address"),
  13. get("user")
  14. );
  15. getStateCode({ user: { address: { state: "ny" } } }); //=> Maybe.Just("NY")
  16. getStateCode({}); //=> Maybe.Nothing()
  17. var db = {
  18. users: {
  19. JOE: {
  20. name: "Joe",
  21. followers: ["STEVE", "SUZY"]
  22. }
  23. }
  24. };
  25. // We'll pretend to do a db lookup which returns a promise
  26. var lookupUser = userId => Promise.resolve(db.users[userId]);
  27. var lookupFollowers = user => Promise.resolve(user.followers);
  28. lookupUser("JOE").then(lookupFollowers);
  29. // followersForUser :: String -> Promise [UserId]
  30. var followersForUser = R.composeP(lookupFollowers, lookupUser);
  31. followersForUser("JOE").then(followers => console.log("Followers:", followers));
  32. // Followers: ["STEVE","SUZY"]