Abstract Datatype
An abstract datatype is a datatype that is specified by both its constructors and its destructors. More abstractly, an abstract datatype combines both an Functor Algebra and a Functor Coalgebra, or, alternatively, via a Functor Dialgebra.