
#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 simonpj): Great work. I'm going to add some top level comments here * I'd love a wiki page summarising the programmer's-eye-view of the design; and sketching the implementation. You may say that the programmer's eye view is in the paper, but (a) that's less accessible, and (b) details change, such as the type, which you have called `Ref`. * Bikeshed: I don't that is at all a good name... sounds mutable to me. I don't think `Static t` so bad. `StaticName` is ok, as is `StaticPtr`. * The type checker is not supposed to do program transformations like floating bindings to top level. It should be possible to display the output of the type checker in an IDE, exactly as the programmer wrote it, fully decorated with type information. 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. * I don't understand `checkStaticValues`. The typing rule for `static` in the paper is quite simple, so what is going on here? * What is `addrToAny#` and where is it documented? * I'm pretty convinced that static values (`Refs`) should come with a `TypeRep` -- or at least the fingerprint of a `TypeRep` so that we can reject bogus values. That wouldn't be hard, would it? The merit of having a `TypeRep` tree rather than just a fingerprint is that the error message might be more informative. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7015#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler