changes the semantics of function contracts
  -- instead of passing in a string for comparison, you pass in an actual combinator