import { curry } from '@typed/lambda' import { Maybe, Nothing } from '@typed/maybe' import { hasOwnProperty } from './hasOwnProperty' /** * Get a value from an object. */ export const prop = curry( >(key: K, obj: O): Maybe => hasOwnProperty(key, obj) ? Maybe.of(obj[key]) : Nothing, ) as { >(key: K, obj: O): Maybe (key: K): >(obj: O) => Maybe } export const propOf = curry( >(key: K, obj: O): O[K] => obj[key], ) as { >(key: K, obj: O): O[K] (key: K): >(obj: O) => O[K] }