¿Cómo aplanar una lista a una lista sin coerción?

Estoy tratando de lograr la funcionalidad similar a unlist, con la excepción de que los tipos no están obligados a un vector, sino que se devuelve la lista con tipos preservados. Por ejemplo

flatten(list(NA, list("TRUE", list(FALSE), 0L))

debería regresar

list(NA, "TRUE", FALSE, 0L)

en lugar d

c(NA, "TRUE", "FALSE", "0")

que sería devuelto porunlist(list(list(NA, list("TRUE", list(FALSE), 0L)).

Como se ve en el ejemplo anterior, el aplanamiento debe ser recursivo. ¿Existe una función en la biblioteca R estándar que logre esto, o al menos alguna otra función que pueda usarse para implementar esto de manera fácil y eficiente?

ACTUALIZA: No sé si está claro por lo anterior, pero las no listas no deben aplanarse, es decir,flatten(list(1:3, list(4, 5))) debería devolverlist(c(1, 2, 3), 4, 5).

Respuestas a la pregunta(6)

Su respuesta a la pregunta