Enum variant are declared via dictionary, where key are the variant
fields and values are types;
e.g. variant = {"a": int, ...}
We currently do not support:
- multi assignment: a = b = 1 are not supported
- inline assignment e.g. v1, v2 = {}, {}
- variant=function(...)? [this is more a metaprogramming feature]