opaque type ID = string;
opaque type Foo<T> = Bar<T>;
opaque type Maybe<T> = _Maybe<T, *>;
export opaque type Foo2 = number;
opaque type union = {
  type: "A"
} | {
  type: "B"
};
opaque type overloads = ((x: string) => number) & ((x: number) => string);