I would love to hear an authoritative answer to this. My belief is, that for the examples you give, the semantics should be equivalent, but that in general f2{T2}(...) is more powerful because it introduces a type variable (which behaves as any other variable in the function body) that can be used to constrain the types of other parameters in a way not possible for f1.
Apart from that, my belief (again) is that any differences should be restricted to implementation details that should only affect (constant factors in) performance (if Kevin's answer is saying something else then it went completely over my head, again). Would love confirmation or correction on that... (Related, why is :: used in parameter declarations, rather than <:? I can see that it "doesn't really matter" since concrete types are leaves in the graph, and so constraints on abstract types must be <: even if it says ::, but it seems confusing....) Andrew On Thursday, 27 February 2014 19:53:21 UTC-3, Sam L wrote: > > If I want to write a function that takes a type as an argument, is there a > difference between how T1 behaves in f1 and how T2 behaves in f2 if the > functions have signatures f1(T1::Type) and f2{T2}(::Type{T2})? > > Thanks, > Sam >