Esto no es muy legible.
No es recomendable usar singularSi.
Necesitas una subtarea que elimine los repetidos. Es similar a lo que hiciste en "el más viejo de los más viejos".
Queremos saber si un elemento está en "una lista sin repetidos". Me refiero al caso recursivo.
proyectosDe (r:rs) = singularSi (proyecto r) (not (elProyectoEstaEnRoles (proyecto r) rs)) ++ proyectosDe rs
Esto no es muy legible. No es recomendable usar singularSi. Necesitas una subtarea que elimine los repetidos. Es similar a lo que hiciste en "el más viejo de los más viejos". Queremos saber si un elemento está en "una lista sin repetidos". Me refiero al caso recursivo.