import { Iso } from 'monocle-ts'
import { coerce as coerceFromNewtype, Const } from './newtypes'
export type Named = Const
export const name = (a: A) => (f: (namedA: Named) => T): T =>
f((a as unknown) as Named)
export const the = coerceFromNewtype
export const coerce = >(a: A) =>
(a as unknown) as N
export const iso = () => new Iso, T>(the, coerce)