type Bar = ( number | string ) => number; type X = (?(number, number) => number) => void; type X = ?((number, number) => number) => void; type X = ?(number, number) => number => void; type X = 1234 => void; type X = 'abc' => void; type X = true => void; type X = false => void; type X = boolean => void; type X = number => void; type X = void => void; type X = null => void; type X = any => void; type X = empty => void; type X = mixed => void; type X = string => void; type X = abc => void; type X = a | b => void; type X = (a | b) => void; type X = a & b => void; type X = (a & b) => void;