For example, a linked list in Haskell has this definition, it's either empty or a node containing a single element and another listpic.twitter.com/BLveY6sGad
You can add location information to your Tweets, such as your city or precise location, from the web and via third-party applications. You always have the option to delete your Tweet location history. Learn more
For example, a linked list in Haskell has this definition, it's either empty or a node containing a single element and another listpic.twitter.com/BLveY6sGad
Interpreting sum types as addition and product types as multiplication (that's why they have those names duh) you can write L(x) = 1 + xL(x) which you can solve to give the function L(x) = 1/(1-x)
This has the series expansion L(x) = 1 + x + x^2 + x^3 + ... which tells you that a list is either empty (1) or has one element (x) or two elements (x^3) etc etcpic.twitter.com/YG70F7OfL7
Binary trees are more fun. A binary tree is either empty, or a branch consisting of an element and a pair of binary treespic.twitter.com/AoBNXSOgWN
Converting it to math gives T(x) = 1 + xT(x)^2 which you can solve with the quadratic formula (what) to give T(x) = (1 - sqrt(1 - 4x))/(2x)
The coefficients in the series expansion are telling you that there is one empty binary tree, one binary tree with one element, two binary trees with two elements (the second element could either be on the left or the right branch)pic.twitter.com/dYJaI8Y2Ye
It's not immediately obvious that there are five binary trees with three elements, or fourteen binary trees with four elements, but there arepic.twitter.com/y3ksysrXxo
The functions you derive from the algebraic data type are called "generating functions" and they are useful for all kinds of counting problems with unlabeled data (ordinary gf) or labeled data (exponential gf) or probability problems (probability generating function)
The mind-blowingly cool thing is that you can differentiate the generating function to get a new function, and if you turn that back into an ADT, it is the zipper type associated with the original ADT (that is, the full data structure plus a 'focus' that you can move around)
I first saw this in a Conor McBride paper from about 2000 but I'm not sure if that's the first time it was noticed, as once you have the ADT <--> generating function correspondence, differentiating it seems like quite a natural thing to do
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.176.2720&rep=rep1&type=pdf …
Anyway I will probably go back to regularly scheduled finance content after this, feel free to ignore and pretend nothing weird has happened if you like.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.