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型であると考えてもよいような気がした。