Hola!
Estaba implementando este linting y me encontré con algunas dudas. Trataré de ser lo más general posible para no estar diciendo posibles soluciones.
Es el primer linting donde me ocurre que debo saber el nombre de la función (no función lambda, sino como la que está en el ejemplo). Hasta ahora mis lintings recibían expresiones Expr, desentendiendose del nombre de la función, y vienen funcionando bien. Sin embargo, pensé en darle como argumento a lintMap algo de la forma FuncDef, donde ahí sí logro conocer el nombre de la función para saber si estoy llamando a la función recursivamente en el último caso del case.
Pero esta forma de pasarle un FuncDef como argumento me parece rara: primero porque como dije, mis lintings reciben Expr, y segundo porque no termino de comprender cómo en Linter.hs se procesan los lintings. Es decir, si hago que lintMap reciba una función como argumento, no veo la manera de que se procese bien por el Linter.hs.
Agradezco cualquier aclaración, y entendería si creen que la respuesta a ésta pregunta es dar la solución.
Saludos!