[GHC] #7015: Add support for 'static'
GHC
ghc-devs at haskell.org
Fri Aug 8 13:53:25 UTC 2014
#7015: Add support for 'static'
-------------------------------------+-------------------------------------
Reporter: edsko | Owner:
Type: feature | Status: patch
request | Milestone: 7.10.1
Priority: normal | Version: 7.4.2
Component: Compiler | Keywords:
Resolution: | Architecture: Unknown/Multiple
Operating System: | Difficulty: Unknown
Unknown/Multiple | Blocked By:
Type of failure: | Related Tickets:
None/Unknown |
Test Case: |
Blocking: |
Differential Revisions: Phab:D119 |
-------------------------------------+-------------------------------------
Comment (by facundo.dominguez):
Replying to [comment:12 simonpj]:
> * I'd love a wiki page summarising the programmer's-eye-view of the
design; ...
Good suggestion.
> * What is `addrToAny#` and where is it documented?
Found here:
http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim-0.3.1.0
/GHC-Prim.html#v:addrToAny-35-
> * ... So I think it'd be better if the desugarer did the floating, not
the type checker. That should not be a hard change to make.
Sure, we can try it.
> * I don't understand `checkStaticValues`. The typing rule for `static`
in the paper is quite simple, so what is going on here?
One of the major design choices we had to make is how to handle qualified
types. Say we have the expression `static return`, we had to choose
between giving it types like:
{{{
static return :: Ref (Monad m => a -> m a)
static return :: Monad m => Ref (a -> m a)
}}}
or disallowed them completely.
The last option looked the simplest while still useful, so we disallowed
static forms whose bodies have qualified types. Now, say we want to type-
check an expression like
{{{
f :: Ref (a -> IO a)
f = static return
}}}
We expect the expression `return` to have type `a -> IO a`. Yet we don't
know if the type of `return` will be qualified or not until the whole
definition of `f` is type-checked. `f` could have more equations and no
type signature, or we may even have to wait for the whole module to be
type-checked because of the monomorphism restriction.
`checkStaticValues` is the piece of the implementation that considers if
the body of the static form has a qualified type. And this, we understand,
is only practical to do after the whole module has been type-checked.
> * I'm pretty convinced that static values (`Refs`) should come with a
`TypeRep` ...
In case you mean Data.Typeable.TypeRep, how could we deal with static
forms whose bodies have a polymorphic type?
> Bikeshed: ...
I leave this for later.
Thanks for looking at the implementation. It really needs the feedback.
And probably, we should document better the design and discuss it.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7015#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list