Why doesn't this type substitution work?

abstract type MM{T,U,V} end
function f(args...)
           typename = (vtypedecl{T, U, V} = MM{T, U, CV} where CV <: V)
           typename{args...}
  end
julia> f(Int,Number,Float64)
ERROR: UndefVarError: V not defined
Stacktrace:
 [1] f(::Type, ::Vararg{Type,N} where N) at ./REPL[4]:2
 [2] top-level scope at REPL[5]:1

Thanks

Try

function f(args...)
       typename = (vtypedecl{T, U, V} = MM{T, U, CV} where {T,U,V,CV <: V})
       typename{args...}
end