¿Cómo analizar una cadena y devolver una matriz anidada?

Quiero una función de Python que tome una cadena y devuelva una matriz, donde cada elemento de la matriz sea un carácter u otra matriz de este tipo. Las matrices anidadas se marcan en la cadena de entrada comenzando con '(' y terminando con ')'.

Así, la función actuaría así:

1) foo("abc") == ["a", "b", "c"]
2) foo("a(b)c") == ["a", ["b"], "c"]
3) foo("a(b(c))") == ["a", ["b", ["c"]]]
4) foo("a(b(c)") == error: closing bracket is missing
5) foo("a(b))c") == error: opening bracket is missing
6) foo("a)b(c") == error: opening bracket is missing

Nota: Prefiero una solución que sea puramente funcional.

Respuestas a la pregunta(7)

Su respuesta a la pregunta