import * as O from 'fp-ts/Option'; type Option = O.Option; export const hasKey = (o: T, k: keyof T): boolean => Object.prototype.hasOwnProperty.call(o, k); export const lookup = (o: T, k: K): Option => hasKey(o, k) ? O.some(o[k]) : O.none; export const map = (o: Record, f: (a: A) => B): Record => { const r: Record = {}; for (const k of Object.keys(o)) { r[k] = f(o[k]); } return r; }; export const fromPairs = (pairs: Array<[string, A]>): Record => { const r: Record = {}; pairs.forEach(([ k, v ]) => { r[k] = v; }); return r; };