Inductive Data Type
Explained in
CoinductiveDataType