Updated (@dsyme):
It seems reasonable to support a limited form of intersection type, e.g.
let f (env: #ILogger1 & #ILogger2) = ...
or also naming the type variable:
let f (env: 'T & #ILogger1 & #ILogger2) = ...
Since the F# 7 release there is a discrepancy between generic and non-generic restrictions, ie
allowed: env: 'T when ILogger<'T>
not allowed env: 'T when ILogger
Describe the solution you'd like
I propose to add support for non-generic case as well.
Describe alternatives you've considered
We can live with the old syntax env: 'T when 'T:> ILogger
Another possible syntax (covering multiple cases) could be env: #ILogger1 and #ILogger2
Pros and Cons
The advantages of making this adjustment to F#: this will allow to be more concise when dealing with a long list of restrictions, for example when implementing dependency injection based on the article https://bartoszsypytkowski.com/dealing-with-complex-dependency-injection-in-f/
The disadvantages of making this adjustment to F# are: one can say that this encourage type-level programming, but since this is the best (and probably the only) way to do scalable DI in F#, it's not an issue for me
Extra information
Estimated cost (XS, S, M, L, XL, XXL): S
Related suggestions: (put links to related suggestions here)
dotnet/fsharp#14477
Affidavit (please submit!)
Please tick this by placing a cross in the box:
Please tick all that apply:
For Readers
If you would like to see this issue implemented, please click the 👍 emoji on this issue. These counts are used to generally order the suggestions by engagement.
Updated (@dsyme):
It seems reasonable to support a limited form of intersection type, e.g.
or also naming the type variable:
Since the F# 7 release there is a discrepancy between generic and non-generic restrictions, ie
allowed:
env: 'T when ILogger<'T>not allowed
env: 'T when ILoggerDescribe the solution you'd like
I propose to add support for non-generic case as well.
Describe alternatives you've considered
We can live with the old syntax
env: 'T when 'T:> ILoggerAnother possible syntax (covering multiple cases) could be
env: #ILogger1 and #ILogger2Pros and Cons
The advantages of making this adjustment to F#: this will allow to be more concise when dealing with a long list of restrictions, for example when implementing dependency injection based on the article https://bartoszsypytkowski.com/dealing-with-complex-dependency-injection-in-f/
The disadvantages of making this adjustment to F# are: one can say that this encourage type-level programming, but since this is the best (and probably the only) way to do scalable DI in F#, it's not an issue for me
Extra information
Estimated cost (XS, S, M, L, XL, XXL): S
Related suggestions: (put links to related suggestions here)
dotnet/fsharp#14477
Affidavit (please submit!)
Please tick this by placing a cross in the box:
Please tick all that apply:
For Readers
If you would like to see this issue implemented, please click the 👍 emoji on this issue. These counts are used to generally order the suggestions by engagement.