The code below is an excerpt from a more complicated code I am writing. It contains a parametrized type in which the parameter is itself another parametrized type. I have attached the printout (0.4.0-dev+323). Notice the error message at the end. My questions are:
(1) How is it possible that the type of t includes dummy parameters K and D, which aren't real types at all? (2) Why is Julia not able to match t2 but it is able to match t to the signature of test0()? Thanks, Steve Vavasis julia> testnestparam.test1() typeof(t) = Token{SortedDict{K,D},IntSemiToken} typeof(t2) = Token{SortedDict{Int64,ASCIIString},IntSemiToken} methods(test0) = # 1 method for generic function "test0": test0(i::Token{SortedDict{K,D},IntSemiToken}) at c:\Users\vavasis\Documents\Projects\qmg21\julia\testnestparam.jl:28 ERROR: `test0` has no method matching test0(::Token{SortedDict{Int64,ASCIIString},IntSemiToken}) in test1 at c:\Users\vavasis\Documents\Projects\qmg21\julia\testnestparam.jl:38 module testnestparam immutable IntSemiToken address::Int end immutable Token{T, S} container::T semitoken::S end # take a token apart semi(i::Token) = i.semitoken container(i::Token) = i.container # put a token back together assemble(m, s) = Token(m,s) type SortedDict{K, D} <: Associative{K,D} bt::Dict{K,D} end typealias SDToken Token{SortedDict, IntSemiToken} sdtoken_construct(m::SortedDict,int1::Int) = SDToken(m, IntSemiToken(int1)) test0(i::SDToken) = nothing function test1() s = SortedDict([1=>"a",2=>"b"]) t = sdtoken_construct(s, 0) t2 = assemble(t.container, t.semitoken) println("typeof(t) = ", typeof(t)) println("typeof(t2) = ", typeof(t2)) println("methods(test0) = ", methods(test0)) test0(t) test0(t2) #Line 38 end end