
On Wed, Mar 21, 2007 at 09:28:15AM +0000, Magnus Therning wrote:
Recently I've been hacking together a small Haskell module on top of ptrace(2). It's comming along nicely, but it's very low level. The signals arrive in a list:
wait :: Int -> IO [Signal]
Aside: Why lazy? It seems like wait :: Int -> IO Signal would be better, and almost as easy to use: sequence_ . repeat $ wait >>= processSignal
and processing of the signals can be done using e.g. mapM_:
wait childPid >>= mapM_ processSignal
[snip]
(Or would it be better using IORefs and "OO" in the way described in "IO Inside"[1]?)
What I am struggling with is how to allow the user of the module to have state as well. I can see how "OO"[1] can be used to solve it, but is there a more elegant, maybe more idiomatic (Haskellic??), way?
In some sense a PID is *already* a handle to external mutable state, so the original motivation for IORefs applies. data Child = Child { pid :: CInt, debug_state :: IORef StateBlock } wait :: Child -> IO () ... HTH, Stefan