import { contramap, Eq } from 'fp-ts/Eq'
import { pipe } from 'fp-ts/function'
import * as S from 'fp-ts/string'
type UUID = string
interface User {
readonly key: UUID
readonly firstName: string
readonly lastName: string
}
const eqUUID: Eq<UUID> = S.Eq
const eqUserByKey: Eq<User> = pipe(
eqUUID,
contramap((user) => user.key)
)
assert.deepStrictEqual(
eqUserByKey.equals({ key: 'k1', firstName: 'a1', lastName: 'b1' }, { key: 'k2', firstName: 'a1', lastName: 'b1' }),
false
)
assert.deepStrictEqual(
eqUserByKey.equals({ key: 'k1', firstName: 'a1', lastName: 'b1' }, { key: 'k1', firstName: 'a2', lastName: 'b1' }),
true
)
import { contramap, Eq } from 'fp-ts/Eq'
import { pipe } from 'fp-ts/function'
import * as S from 'fp-ts/string'
type UUID = string
interface User {
readonly key: UUID
readonly firstName: string
readonly lastName: string
}
const eqUUID: Eq<UUID> = S.Eq
const eqUserByKey: Eq<User> = pipe(
eqUUID,
contramap((user) => user.key)
)
assert.deepStrictEqual(
eqUserByKey.equals({ key: 'k1', firstName: 'a1', lastName: 'b1' }, { key: 'k2', firstName: 'a1', lastName: 'b1' }),
false
)
assert.deepStrictEqual(
eqUserByKey.equals({ key: 'k1', firstName: 'a1', lastName: 'b1' }, { key: 'k1', firstName: 'a2', lastName: 'b1' }),
true
)