created hopefully correct type variants for ast implementation