Ok, I am seriously thinking about using a Y combinator here

Signed-off-by: Michael Donaghy <md401@srcf.ucam.org>