Functional programming provides a fundamental basis for reasoning about our programs and building out principled abstractions. However, it is not enough on its own and we also rely on other programming tools to aid in constructing programs correctly and efficiently. An advanced example of such a tool is dependent types; that is, types that depend on values. Dependent types can be used to provide s
![Tic Tac Type: Dependent Types with Idris](https://cdn-ak-scissors.b.st-hatena.com/image/square/2d7c9aacd32f14c4f109f761e8a21605f79fca8a/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F555f4710b9400131f0b05a4e8325df9f%2Fslide_0.jpg%3F2981270)