El programador Simon Dobson documenta un comportamiento inesperado del compilador SBCL de Common Lisp al declarar estructuras cuyos campos son arrays tipados con sub-tipos restringidos, como (simple-array (unsigned-byte 16)). Cuando se usa la sintaxis literal #1A() o #1A(1 2 3), la macro del lector asigna a la expresión el tipo (simple-vector 0) o (simple-vector 3), que no es sub-tipo del tipo declarado, de modo que la comprobación de tipos falla tanto con valores por defecto como con valores explícitos. En cambio, la misma declaración sí funciona con tipos generales como integer, number o float, y también con unsigned-byte sin anchura. Dobson atribuye la discrepancia al mecanismo de "upgraded array element type": el estándar permite que la implementación almacene los arrays con un tipo distinto al declarado, siempre que sea super-tipo del solicitado. Para tipos sin restricción como integer el tipo elevado es t, la cúspide del retículo, lo que hace compatible cualquier representación; en cambio, para tipos con anchura como (unsigned-byte 16) el tipo elevado coincide con el tipo original, así que SBCL optimiza la representación y exige una comprobación de elementos más estricta. La solución consiste en evitar la macro del lector y construir el array con make-array, especificando :element-type de forma explícita, con lo que la estructura acepta el valor por defecto y la asignación externa sin errores. Dobson señala que no ha encontrado este caso documentado en los manuales ni en otras fuentes, y lo comparte para que otros programadores de SBCL no pierdan tiempo rastreándolo.
