code: function identity(f) {
      var A = f();
  
      function returnSelf(b) {
        return b;
      }
  
      return forAll(_.Int).satisfy(function(a) {
        return A.of(returnSelf).ap(A.of(a)).isEqual(A.of(a));
      });
    }
docs: /*
  A value that implements the Applicative specification must also
  implement the Functor specification.
  
  A value which satisfies the specification does not need to implement:
  Functor's 'map', derived as '(f) => this.of(f).ap(this)'
  
  A value which has an Applicative must expose an 'ap' method.
  The 'ap' method takes one argument:
  
  a.ap(b)
  
  1. 'a' must be an Applicative of a function,
  i. If 'a' does not represent a function, the behavior of 'ap' is unspecified.
  2. 'b' must be an Applicative of any value.
  3. 'ap' must apply the function in Applicative 'a' to the value in Applicative 'b'.
  
  A value which has an Applicative must expose an 'of' method on itself or its 'constructor' object.
  The 'of' method takes one argument:
  
  a.of(b)
  a.constructor.of(b)
  
  1. 'of' must provide a value of the same Applicative.
  i. No parts of 'b' should be checked.
   /*
  1st Law: Identity
  'a.of((a) => a).ap(b)' is equivalent to 'b'