dispatching on function-like things can be quite tedious, as `typeof`

as of now forgets information.

While `typeof(::Function)`

gives the function singleton type, `typeof(::Type{T}) where T`

, i.e. typeof a Type-constructor, will return `DataType`

or a respective other higher type, and as such looses the information about the type.

I want to discuss whether it makes sense to change this in general such that

```
typeof(::Type{T}) where T = Type{T}
supertype(::Type{Type{T}}) where T = ... # the same as now ``typeof(::Type{T}) where T``, i.e. DataType, UnionAll, etc.
```

For an example letâ€™s choose `T = Some`

, then I would suggest to have the following

```
typeof(Some) # Type{Some}
supertype(typeof(Some)) # UnionAll
```

I am curious about other perspectives.