I propose we add #elif to the preprocessor grammar as part of the #if .. #else .. #endif block.
The existing way of approaching this problem in F# is: Nesting another #if under #else.
Pros and Cons
The advantages of making this adjustment to F# are: alignment with C# and simpler syntax.
The disadvantages of making this adjustment to F# are: none (well, it's work to implement).
Motivation
F# seems to have #elif preprocessor directive / pragma missing:
https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-directives#preprocessor-directives
C# has it:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives#conditional-compilation
I know it's not good practice to use lot of these, I'm not trying to do a templating engine, I would just like to do a simple switch like this:
[<Literal>]
let myPath =
#if WIN64
"/library/x64/runtime.dll"
#elif WIN86
"/library/x86/runtime.dll"
#elif MAC
"/library/iOS/runtime-osx.dll"
#else
"/library/unix/runtime.dll"
#endif
The current workaround:
[<Literal>]
let myPath =
#if WIN64
"/library/x64/runtime.dll"
#endif
#if WIN86
"/library/x86/runtime.dll"
#endif
#if MAC
"/library/iOS/runtime-osx.dll"
#endif
#if !WIN64 && !WIN86 && !MAC
"/library/unix/runtime.dll"
#endif
Extra information
Estimated cost (XS, S, M, L, XL, XXL): S
Related suggestions: #273
Affidavit (please submit!)
Please tick these items 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.
Moved from: dotnet/fsharp#17282
I propose we add
#elifto the preprocessor grammar as part of the#if .. #else .. #endifblock.The existing way of approaching this problem in F# is: Nesting another
#ifunder#else.Pros and Cons
The advantages of making this adjustment to F# are: alignment with C# and simpler syntax.
The disadvantages of making this adjustment to F# are: none (well, it's work to implement).
Motivation
F# seems to have
#elifpreprocessor directive / pragma missing:https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-directives#preprocessor-directives
C# has it:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives#conditional-compilation
I know it's not good practice to use lot of these, I'm not trying to do a templating engine, I would just like to do a simple switch like this:
The current workaround:
Extra information
Estimated cost (XS, S, M, L, XL, XXL): S
Related suggestions: #273
Affidavit (please submit!)
Please tick these items 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.
Moved from: dotnet/fsharp#17282