Witnessing (Co)datatypes

by Jasmin Christian Blanchette , Andrei Popescu , Dmitriy Traytel