
#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 rodlogic): I would just like to document another potential use case for this in addition to the Cloud Haskell one: [http://haste-lang.org/haskell14.pdf A Seamless, Client-Centric Programming Model for Type Safe Web Applications]. I am thin on the details here since I just came across the paper, but the idea is to provide an: ... alternative programming model based on Haskell, in which web applications are written as a single program rather than as two independent parts that just so happen to talk to each other. And: The remote function takes an arbitrary function, provided that all its arguments as well as its return value are serializable through the Serialize type class, and '''produces a typed identifier which may be used to refer to the remote function'''. In this example, the type of greetings is Remote (String → Server ()), indicating that the identifier refers to a remote function with a single String argument and no return value. Remote functions all live in the Server monad. The part of the program contained within the App monad is executed on both the server and the client, albeit with slightly different side effects, as described in section 3. And here is a simple example: {{{#!haskell import Haste.App helloServer :: String → Server () helloServer name = liftIO $ putStrLn (name ++ " says hello!") main :: App Done main = do greetings ← remote helloServer runClient $ do name ← prompt "Hi there, what is your name?" onServer (greetings <.> name) }}} I know this is not the core of the design space, but it is another dimension to consider. For example, being able to customize the closure serialization format could be an important requirement. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7015#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler