4 ms·
Instead of ADTs there are object variants in Nim: http://nim-lang.org/manual.html#object-variants http://nim-lang.org/manual.html#object-variants With ADTs:
by def- 12y ago
Instead of ADTs there are object variants in Nim: http://nim-lang.org/manual.html#object-variants http://nim-lang.org/manual.html#object-variants
With ADTs:
data Shape a =
Rectangle
{ x :: Float
, y :: Float
, width :: Float
, height :: Float
}
| Circle
{ x :: Float
, y :: Float
, radius :: Float
}
With Object Variants, note that we don't have to repeat x and y:
type
ShapeKind = enum Rectangle, Circle
Shape = object
x, y: float
case kind: ShapeKind
of Rectangle: width, height: float
of Circle: radius: float
The pattern matching in Nim is quite limited. Something like this works:
let (x, y) = getCoordinates()
But Nim doesn't have (x,y) = (y,x) for example, instead swap can be used.
You could implement your own pattern matching using metaprogramming: http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-languag/240165321 http://www.drdobbs.com/open-source/nimrod-a-new-systems-prog...