added callable types and an invoke macro