Hi Ben, I totally understand, HOCs are confusing and Formik contains a bit too much magic. Essentially, the withSubform HOC returns (curries) a new Component that has the same prop signature as what Formik's Field component accepts. Let us take a look at Field component:
```
<Field name="myfield" component={MyCustomField} />
```
When you do this, Formik calls MyCustomField with a bunch props as seen in this page: https://formik.org/docs/api/field. field, form, fieldProps etc are all required by Formik to render a custom field and make it behave like one. If you add a debug breakpoint in the browser developer tab, you can see all the different fields Formik is sending into the custom component. What we've done here in withSubform is picked some of those relevant props such as name, value, setFieldValue etc to make our component behave just like any other Formik field. Hope this makes sense. Feel free to ping me if you have any questions.