write interpreter from GADT to finally-tagless