Primary and secondary inputs don't have to be promises