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
>

Reply via email to