updated type sigs and require_a statements