[bitc-dev] Syntax of type variables

Jonathan S. Shapiro shap at eros-os.org
Sun Mar 21 22:50:17 PDT 2010


Thanks. That's very helpful.

On Sun, Mar 21, 2010 at 10:13 PM, Sandro Magi <naasking at higherlogics.com> wrote:
> On 21/03/2010 9:02 PM, Jonathan S. Shapiro wrote:
>> One question about C# type variables arises. Is it legal for inner
>> declarations to "shadow" the type parameter name, as in:
>>
>>   static void f<A>(A x) {
>>     ....
>>     int A; // note this shadows the type parameter!
>>     ...
>>   }
>
> No, it's compiler error CS0412:
> http://msdn.microsoft.com/en-us/library/xe35chxa.aspx
>
>> Another: are the variable names in a CLI generic declaration
>> considered part of the type, or only their positions? That is: if we
>> rename the type parameter variables, are we making a new type?
>
> At the CIL level, only the type variable positions are used. They are
> also in a separate namespace using a !! prefix, similar to how you
> referred to ML type variables being in a separate namespace with a ' prefix.
>
> My vote goes for the ' or something equally distinct. C# has
> demonstrated that the angle bracket notation combined with simple
> letters and/or words, ie. <T>, makes nested generics a bit of a mess.
> The use of appropriate whitespace and syntactically distinct type
> variables is much easier to read.
>
> F# supports both notations, 'a and T [2], specified as ML-style "int
> list" or C#-style "list<int>" [1], although they suggest the ML notation
> only for built-in F# types [3].
>
> Sandro
>
> [1] http://msdn.microsoft.com/en-us/library/dd233215%28VS.100%29.aspx
> [2] From [1], "You can also make a function generic by using the single
> quotation mark syntax in a type annotation to indicate that a parameter
> type is a generic type parameter"
> [3] See "Note" section in [1]
>
> _______________________________________________
> bitc-dev mailing list
> bitc-dev at coyotos.org
> http://www.coyotos.org/mailman/listinfo/bitc-dev
>
>



More information about the bitc-dev mailing list