function createFunctionSpec(predicate, gen) { return { conform: (value, unwrap = false) => conform(value, unwrap, predicate), unform: _.identify, explain: function*(value, options) { options.pred = _.isEmpty(predicate.name) || predicate.name === 'anonymous' ? `${predicate}` : predicate.name; if (!predicate(value)) { yield getExplanation(value, options); } }, gen: gen ? gen : () => functions.gen(predicate) }; }