Haskell Hole Driven Development

22 May 2015

I just finished attending the excellent Brisbane YOW! Lambda Jam. One of the really useful things I learned from Tony Morris was “Hole Driven Development” for Haskell - basically using the type system to help you write a function.

Firstly, when writing a function, you can use placeholders that will allow code to compile (without producing error messages) while you’re working on other parts. The two placeholders are:

error "todo" (or any string)
undefined

The “hole driven” part involves using the underscore to get the compiler to print types:

_undefined
_x
_foo

For example if I used _x then re-loaded my code in ghci, I would get output like:

Found hole _x with type: a
...
g2 :: a -> b (bound at GetSetLens.hs:312:31)
s2 :: a -> b -> a (bound at GetSetLens.hs:312:28)
g1 :: b -> c (bound at GetSetLens.hs:312:18)
s1 :: b -> c -> b (bound at GetSetLens.hs:312:15)

Showing me that where I had _x a type a was expected, and that I already have functions g2,s2,g1,s1 that consume and produce (curry) given types.

See also the post and video by Matthew Brecknell Hole-driven Haskell.

comments powered by Disqus

  « Previous: Next: »