This post is a Scala version of Haskell Type-Level Instant Insanity by Conrad Parker
This post shows an implementation of Instant Insanity puzzle game at compile time, using powerful Scala type system. This post is based on amazing article by Conrad Parker in the Monad Reader Issue 8. Original article is around 20 pages long, this post is much more concise version of it. Original article is very well written and easy to understand, this post should help with jumping from Scala to Haskell code for people who are not familiar with Haskell language.
Textbook Implementation
Instant Insanity puzzle formulated as:
It consists of four cubes, with faces coloured blue, green, red or white. The problem is to arrange the cubes in a vertical pile such that each visible column of faces contains four distinct colours.
“Classic” solution in scala can be found here, this solution stacks the cubes one at a time, trying each possible orientation of each cube.
I’m going to show how to translate this solution into Scala Type System.