valderman / haste-compiler

A GHC-based Haskell to JavaScript compiler
http://haste-lang.org
BSD 3-Clause "New" or "Revised" License
1.45k stars 109 forks source link

How to do server-side state with the current version? (liftServerIO is gone) #387

Open WolframKahl opened 8 years ago

WolframKahl commented 8 years ago

I find examples for using server-side state in the Haskell ’14 paper and in haste-compiler/examples/chatbox/chatbox.hs, but these rely on liftServerIO, which is not part of the new Haste anymore.

How can server-sider state be implemented with the new remote $ static (import_ f) pattern?

WolframKahl commented 8 years ago

For the time being, I got it to work using unsafePerformIO $ ... newIORef ..., but this is not very satisfying...

valderman commented 8 years ago

For 0.6, it's still unclear how this will be implemented, since it will support multiple servers among other things. Currently I'm leaning towards putting this into the same class instance as the routing information, bit this isn't set in stone so suggestions are very welcome.

Haste.App.Simple will probably implement something very similar to liftServerIO for the Server special case, since Simple already provides a Node instance for Server.

valderman commented 7 years ago

In the new Haste.App, server-side state is implemented using the init method of the Node type class, which is executed on node startup. Its return value is used as the environment of the node. Please see the paper for more details.