How would one share data between a parent and forked child process in Haskell?
How would I even go about forking a child process using Haskell in the first place?
Also, if pipes are an obvious solution to the data sharing question - is there any other way to do it besides using pipes? I'm familiar with the use of shared memory segments in C (the shmget, *shmat, shmdt and shmctl functions). Could Haskell be able to imitate this? If so, how?
I'd be very grateful for any help you could spare.
I must admit I'm very much new to functional programming languages, even more so when it comes to Haskell. So forgive me (and please correct me) if I said something silly.
Better yet, use Software Transactional Memory - that is, TVars and TChannels.
Will recommend the same book, different chapter: http://book.realworldhaskell.org/read/software-transactional-memory.html
Here is a good small example of this technique in action: http://sequence.complete.org/node/257
The OP asked about communicating with a subprocess, not a thread. For that, pipes are a perfectly fine way of doing it. You can also call the C library function directly from Haskell if you want to, although that could get tricky.
This question has a better answer over here: Is there some standard Haskell library dealing with process communication?
use MVars or Channels. See chapter 24 of RealWorld Haskell: http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
If you want to actually fork a process, Unix style, you need to use
forkProcess as given by http://hackage.haskell.org/package/unix-18.104.22.168/docs/System-Posix-Process.html
In this case, MVars and TVars do not do interprocess communication, so you cannot use them to do IPC. All standard techniques for IPC (pipes, sockets, etc) still work. If you want something more high-level, check out Cloud Haskell http://www.haskell.org/haskellwiki/Cloud_Haskell