Adapted from “Phantom type” Haskell Wiki A phantom type is a parametrised type whose parameters do not all appear on the right-hand side of its definition, e.g class Data<M> { value: string; constructor(value: string) { this.value = value } }Here Data is a phantom type, because the M parameter doesn’t appear in its implementation. Why? An example: validating user inputSay you have a use(input: str