
Hello, It is happening in practice that one wants to create a static pointer in a function and use some local definitions.
f :: Static (Int -> Int) f x = sf where body = (+1) sf = Static body
'body' defines a closed expression, but this is currently rejected because desugaring the static form would produce a top-level binding of the form:
sf_top_level :: Int -> Int sf_top_level = body
where the local binding 'body' is not in scope. Barring inlining, which wouldn't work in more complex examples, one approach around this is to have the compiler move local definitions to the top level during desugaring when they are referenced by a static pointer. Two questions arise: 1) Would this interfere with other aspects of compilation? 2) Would anyone argue there is a better approach to accomplish this? Thanks, Facundo