adding a few necessary ADTs