SMS dit: Generic Programming for Domain Reasoners