StaticPointers to local definitions

Facundo Domínguez facundo.dominguez at
Mon May 25 14:08:49 UTC 2015

   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?


More information about the ghc-devs mailing list