Make ingredient matcher less imperative