composite data type implementation