Try some GADT implementation.