I got an architectural problem here.
Let say there is an IShell
. It mainly responsible to map user's commands (represented as a linux-like strings) to an appropriate IExecutable
's.
Those executables are pretty various. Hence, there are different modules/assemblies/dlls (or how-the-hell-you-call-it): Module1
, Module2
, Module3
all providing different implementations of abovementioned IExecutable
.
Now there is a requirement to be able substitute any of those modules on the fly, at the run time, without stopping IShell
instance. Obviously, there gonna be some kind of API, like /api/update/module1
and... it might return a raw code to be compiled locally (what are advantages and disadvantages?) or it might respond with precompiled *dll.
No matter how, at some point IShell
will eventually receive newest version of particular module. And here emerges the biggest problem. Assuming I can "pause" what's happening inside, what's the clearest and robust way to substitute currently loaded module with a new one?
Since most of the code written in Haskell, I am definitely interested in Haskell-related solution. Or, at least, I'd like to acknowledge the fact that there is no one.
P.S. If someone of you, guys, is aware of concept might work, but not Haskell's realization of that one, still let me know. Thanks in advance.