fslang-suggestions icon indicating copy to clipboard operation
fslang-suggestions copied to clipboard

Generic attributes

Open Happypig375 opened this issue 4 years ago • 2 comments

Generic attributes

Champion "Allow Generic Attributes" is currently in the C# team's working set.

Since CIL already supported this for a decade, if F# were to implement it, we won't have to wait for C# to have this.

Pros and Cons

The advantages of making this adjustment to F# are

  1. Enforcing generic restrictions at compile time which typeof cannot do
  2. Type-safe attribute members without type-unsafe boxing conversions with reflection
  3. Generics is faster than reflection

The disadvantages of making this adjustment to F# are (none)

Extra information

Estimated cost (XS, S, M, L, XL, XXL): M to L

Related suggestions: (put links to related suggestions here)

Affidavit (please submit!)

Please tick this by placing a cross in the box:

  • [x] This is not a question (e.g. like one you might ask on stackoverflow) and I have searched stackoverflow for discussions of this issue
  • [x] I have searched both open and closed suggestions on this site and believe this is not a duplicate
  • [x] This is not something which has obviously "already been decided" in previous versions of F#. If you're questioning a fundamental design decision that has obviously already been taken (e.g. "Make F# untyped") then please don't submit it.

Please tick all that apply:

  • [x] This is not a breaking change to the F# language design
  • [x] I or my company would be willing to help implement and/or test this

For Readers

If you would like to see this issue implemented, please click the :+1: emoji on this issue. These counts are used to generally order the suggestions by engagement.

Happypig375 avatar Jan 21 '21 07:01 Happypig375

Generic attributes are now in C# 11 preview.

I noticed it's possible to define them in F# (guessing the compiler doesn't know that inheriting Attribute makes it one):

type Foo<'t> () =
    inherit Attribute ()

I was a little surprised to find the above can be referenced in C# 11.

jcmrva avatar May 05 '22 01:05 jcmrva

I'll marked as approved-in-principle since this is in C# 11

dsyme avatar Jun 14 '22 16:06 dsyme