import * as Eq from 'fp-ts/lib/Eq' import * as O from 'fp-ts/lib/Option' import { keysT } from '@monorail/sharedHelpers/fp-ts-ext/Record' export const difference = ( eqStruct: { [P in keyof A]: Eq.Eq }, ) => (x: A, y: A): O.Option> => O.fromPredicate((o: object) => Object.keys(o).length > 0)( keysT(eqStruct).reduce( (acc, cur) => ({ ...acc, ...(!eqStruct[cur].equals(x[cur], y[cur]) ? { [cur]: x[cur] } : {}), }), {}, ), )