This question is not about C#/F# compatibility as in this one.
I'd like to know the proper way to implement a type like F# Unit in place of using void.
Obviously I'll discard this result and I'll not expose this type to the outside world.
Wondering if an empty class could impersonate this role.
internal class Unit
{
}
For example in language-ext library, the author used a struct.
Is there any benefit in this choice?
A Logic Gate is a piece of electronic circuit, that can be used to implement Boolean Expressions. While Laws and Theorems of Boolean Logic are used to manipulate the Boolean Expressions, Logic Gates are used to implement these Boolean Expressions in Digital Electronics.
Logic gates are implemented using diodes or transistors. It can also be constructed using vacuum tubes, electromagnetic elements like optics, molecule etc. In a computer, most of the electronic circuits are made up logic gates.
To implement NAND operation using OR gate, we first complement the inputs and then perform OR on the complemented inputs. We get A' + B'. A' + B' is equivalent to (AB)' which can be shown to be true by using de morgan's law.
I'm not sure what is the best way to define Unit for usage from C#. It might differ from how this is done in F# (because in F#, the compiler hides the usage in a way).
However, you can actually find the implementation of F# unit in the core library:
prim-types.fsiprim-types.fsHere are the key points about the F# unit implementation
GetHashCode and Equals in the same way to the Rx versionIComparable and all values of the unit type are equalunit value. It also has no default instance (unlike the Rx unit) and so in F#, all unit values are actually represented as null. However, the language/compiler generally hide this fact.So, it sounds like the only difference in F# is that it uses the null value. If you want to use unit explicitly, this might not be the best choice. However, if you have Unit.Default then you are ultimately defining a type with two possible values, because it can be either Unit.Default or null (and so it is not really a unit!)
System.ValueTuple (without generic argument) is very much unit in C#. The source code is open.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With