There’s another way to define the function signature that lets you call it with a type instead of an instance. While
myfun(::MyType1, x, args...)
takes an instance as the first argument,
myfun(::Type{MyType1}, x, args...)
takes the type itself, and can be called as
myfun(MyType1, 2)
It’s not always you can trivially instantiate a type, for example Float64() does not work, you need to create a specific value. For some types this could be difficult or expensive.