import { curry } from './curry'; type IPartialReturn = { (value: V): (object: O) => O & {[key in K]: V}; (value: V, object: O): O & {[key in K]: V}; } type IAssoc = { (key: K): IPartialReturn; (key: K, value: V): (object: O) => O & {[key in K]: V}; (key: K, value: V, object: O): O & {[key in K]: V}; } export const assoc: IAssoc = curry((key, value, object) => ({ ...object, [key]: value }));