export const ServiceTag = Symbol() export type ServiceTag = typeof ServiceTag export abstract class PhantomTypeParameter { protected abstract readonly [ServiceTag]: { readonly [NameP in Identifier]: (_: InstantiatedType) => InstantiatedType } } /** * @tsplus type ServiceTagged */ export abstract class ServiceTagged extends PhantomTypeParameter {} /** * @tsplus static ServiceTagged make */ export function makeService>(_: Omit) { return _ as T } /** * @tsplus fluent fp-ts/data/Context/Tag make */ export function make>(_: Tag, t: Omit) { return t as T }