laboriously reasoning out support for base datatypes