I'm new to nim. I use the Option type in other languages and was playing around with them in nim (version 2.0.2): {.experimental: "caseStmtMacros".} import fusion/matching let a = case some(0) of Some(_): 1 else: 2 echo a let b = case some(3) of Some(_): 4 of None(): 5 echo b Run
I get a compile error for line 13 `case some(3)`: > template/generic instantiation of `case` from here and for line 14 `of Some(_): 4`: > Error: expression '4' is of type 'int literal(4)' and has to be used (or > discarded) I am trying to understand this. My guess is that since there is no `else` clause in the `case some(3)` statement, nim infers the type of this statement as the absence of any type. It then expects all branches of the `case some(3)` statement to have no type. So then nim complains that the `4` has to be discarded in order for the `Some(_):` branch to have no type. The reason [this example](https://nim-lang.org/docs/options.html#pattern-matching) works is because both branches have `assert` statements that have no type. So nim doesn't know that the `Some(_)` and `None()` branches form an exhaustive check of Option values? Is that a consequence of the Option type being implemented as a macro and not built into the language? Thanks for reading!