Why don't you use dependent types?(lawrencecpaulson.github.io)