Sum Types! Get your Sum Types here!

Sum Types — or, more to the point, Algebraic Data Types (•) — are one of the cooler things in Rust (••). Long familiar to folks in the Haskell / OCaml (and other ML-derived languages), they are, at heart, fairly simple things.
In short, a “sum type” is any type that has many possible representations. e.g. in Haskell, if you wrote
data Bool = False | True
you’d basically be saying that Bool could take the values “False” or “True”.
Extending this, if you wrote (in Haskell again!)
data Event = ClickEvent Int Int 
           | PaintEvent Color
you’d be saying there is a data type Event that contains two cases: it is either a ClickEvent containing two Ints or a PaintEvent containing a Color.
It’s the kind of thing that is ridiculously useful, and impossible to live without once you’ve had it.
By the way, these tend to go by a bunch of different names — tagged union, variant record, disjoint union, and a whole host more.
Chad Austin has an excellent writeup on Sum Types in Rust here — https://chadaustin.me/2015/07/sum-types/ — go check it out
(•) More on Algebraic Data Types here — https://goo.gl/3yfAW4
(••) Along with lifetimes, and a whole host of other stuff — https://goo.gl/Y4T78Z

Comments

Popular posts from this blog

Cannonball Tree!

Erlang, Binaries, and Garbage Collection (Sigh)

Visualizing Prime Numbers