forkIOでスレッドを起動できる。forkIOは(IOモナドに包まれた)スレッドIDを返すので、取っておいて後でkillThreadするとThreadKilled例外を投げて終了できる。 import Control.Concurrent main :: IO () main = do id <- forkIO $ subThread 0 threadDelay 5000000 killThread id subThread :: Int -> IO () subThread num = do putStrLn $ "loop " ++ (show num) threadDelay 1000000 subThread $ num + 1 スレッド間でメッセージを送受信したい場合は、MVarを使う。MVarは容量1のメッセージボックスで、既にメッセージが入ってる時に更に書き込もうとするとブ