haskell: > I am writing a web application server in Haskell. > I would like to be able to modify the app on the > fly. Simplyfing the app server, it would look > like this: > > appServer appMVar reqChan state = > do > req <- readChan reqChan > app <- readMVar appMVar > (state',resp) <- return $ app state req > forkIO $ doResp req resp > appServer appMVar reqChan state' > > The app would get loaded as follows: > > updateApp writeLog appMVar moduleName fnName = > do > mbApp <- (getApp >>= Just) `catch` > (\err -> writeLog err >> return Nothing) > maybe (return ()) (overWriteMVar appMVar) mbApp > threadDelay 1000 > updateApp appMVar moduleName fnName > where > getApp = ghci_load_module moduleName >>= > flip ghci_getName fnName > > overWriteMVar mvar val = > if isEmptyMVar appMVar > then putMVar appMVar app > else swapMVar appMVar app > {-- Is there a way to overwrite an MVar > without risking blocking by another > thread filling it before the putMVar? > > Note it would be really nice if: > > * ghci_load_module would use an already > cached module if the underlying source file has > not changed (and therefore cost little > performance-wise). > > * the returned code would be compiled with lots > of optimization, etc. > > * Bonus: it would verify that the loaded function > is type consistent with channel but tolerate > bigger data types so that if the prior > app assumed state was > > data State = Foo | Bar > > It would not be an error if the new app handled > a state that looked like: > > data State = Foo | Bar | Baz > > The result would be a haskell server where all the > haskell source acts like asp, jsp, php pages, but > its all type safe and you don't have to define a > standard page type as in HSP. > > I am aware that there is a DynamicLoader project: > > http://www.dtek.chalmers.se/~d00ram/dynamic/ > > That lets you load "object files." But I would > really like something that loads source files > instead....
Please look at hs-plugins: http://www.cse.unsw.edu.au/~dons/hs-plugins and the accompanying paper: http://www.cse.unsw.edu.au/~dons/hs-plugins/paper hs-plugins is already being used at Chalmers for their Haskell Server Pages project, which sounds a lot like what you're describing. You can ask Niklas Broberg about this. Cheers, Don _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users