Concurrent Clean : Erlangのようなマルチプロセスプログラミングを行うには

どうすればいいのだろうか?

createServer :: !(a -> *World -> *World) !*World -> ((a u:b -> u:b), *Server, *World)
shutdownServer :: !*Server !*World -> *World

eval :: !a !u:b -> u:b
eval a b = b

Start w = w --> createServer receive
            --> \(send, s, w) = w
            --> eval (client send)
            --> shutdownServer s

receive a w # (f,w) = stdio w
              f = f --> fwrites a
              (_,w) = fclose f w
            = w

client send = 1 --> send "aaa"
                --> send "bbb"
                --> send "ccc"

のような感じでどうだろう?
ここで、sendは

send :: !a !u:b -> u:b

のように型付けされている。
CleanにはUnit型はないので、「1」を代わりに使っている。

      • -

そういえば、*WorldはコンストラクタのないUnit型であると考えてもよいような気がした。