type class reconstructor paper