code: function gets(pred) {
      return function(keys) {
        return function(x) {
          return Z.filter (pred, keys.reduce (function(maybe, key) {
            return Z.chain (get_ (key), maybe);
          }, Just (x)));
        };
      };
    }
docs: # gets :: (Any -> Boolean) -> Array String -> a -> Maybe b . . Takes a predicate, a property path (an array of property names), and . an object and returns Just the value at the given path if such a path . exists and the value satisfies the given predicate; Nothing otherwise. . . See also [`get`](#get). . . ```javascript . > S.gets (S.is ($.Number)) (['a', 'b', 'c']) ({a: {b: {c: 42}}}) . Just (42) . . > S.gets (S.is ($.Number)) (['a', 'b', 'c']) ({a: {b: {c: '42'}}}) . Nothing . . > S.gets (S.is ($.Number)) (['a', 'b', 'c']) ({}) . Nothing . ```