export interface Newtype { readonly _URI: URI; readonly _A: A; } export declare type AnyNewtype = Newtype; export interface Constructor { URI: URI; wrap: { /** * @ets_optimize identity */ (_: T): Newtype; }; unwrap: { /** * @ets_optimize identity */ (_: Newtype): T; }; } export interface GenericConstructor { URI: URI; wrap: { /** * @ets_optimize identity */ (_: T): Newtype; }; unwrap: { /** * @ets_optimize identity */ (_: Newtype): T; }; of: () => Constructor; } export interface ConstructorK> { wrap: { /** * @ets_optimize identity */ (_: T): K; }; unwrap: { /** * @ets_optimize identity */ (_: K): T; }; } export declare function typeDef(): (URI: URI) => Constructor; export declare function genericDef(URI: URI): GenericConstructor; export declare const newtype: >() => (_: Constructor) => ConstructorK; export declare type TypeOf> = [T] extends [ Constructor ] ? Newtype : never; export declare type Generic> = [K] extends [ GenericConstructor ] ? Newtype : never; //# sourceMappingURL=newtype.d.ts.map