[Haskell-cafe] Concurrent with monads

Mario Blažević mblazevic at stilo.com
Mon Nov 15 16:16:19 EST 2010


On 10-11-14 07:36 PM, Jiansen He wrote:
> Hi cafe,
>
> I wounder if it is possible to tell a haskell system that two
> computations with side effects could be executed concurrently.
>
> Here is an affected example:
>
> Suppose two people want to compare their age, but do not want to leak
> their personal information.  The following program reads one person's
> age after another then send back compared result.
>
> age :: IO ()
> age  = do
>    i <- readIntFrom a
>    j <- readIntFrom b
>   writeTo a (i-j)
>   writeTo b (j-i)
>
> How can I express the fact that two readings could be carried out in any
> order?

	You can use the monad-parallel package. Your example could be written as

 > import qualified Monad.Parallel as MP
 >
 > age :: IO ()
 > age  = do
 >   (i, j) <- MP.liftM2 (,) (readIntFrom a) (readIntFrom b)
 >   writeTo a (i-j)
 >   writeTo b (j-i)



More information about the Haskell-Cafe mailing list