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] } : {}),
}),
{},
),
)