code: function composition(f) {
      var A = f();
  
      return forAll(_.Int).satisfy(function(a) {
        var g = function(x) { return x * 2; };
        var h = function(x) { return x - 1; };
  
        function compose(f) {
          return function(g) {
            return function(x) {
              return f(g(x));
            };
          };
        }
  
        var x = A.of(compose).ap(A.of(g)).ap(A.of(h)).ap(A.of(a));
        var y = A.of(g).ap(A.of(h).ap(A.of(a)));
  
        return x.isEqual(y);
      });
    }
docs: /*
  2nd Law: Composition
  'a.of((f) => (g) => (x) => f(g(x))).ap(u).ap(v).ap(w)' is equivalent to 'u.ap(v.ap(w))'