>
>
> That said, I don't see a reason for not including a separate version of
> runParIO :: ParIO a -> IO a for non-deterministic computations. It seems
> really useful!
>
>
Exactly.  I should have been more explicit but that's what I meant about
"adding another module".  You would import Control.Monad.Par.IO and get
runParIO + liftIO but NOT runPar.  This requires doing a newtype over Par
to create the liftIO instance for one and not the other (and preserve Safe
Haskell).  It's a pain but it's no problem.  Both types
Control.Monad.Par.Par and Control.Monad.Par.IO.ParIO will expose the same
interface (i.e. have instances of the same classes -- ParFuture,
ParIVar...), so generic algorithms like "parMap" will still work for either.

  -Ryan


> Regards,
>   - Clark
>
> On Wed, Oct 3, 2012 at 10:24 AM, Ryan Newton <[email protected]> wrote:
>
>> Several of the monad-par schedulers COULD provide a MonadIO instance and
>> thus "liftIO", which would make them easy to use for this kind of parallel
>> IO business:
>>
>>
>> http://hackage.haskell.org/packages/archive/monad-par/0.3/doc/html/Control-Monad-Par-Scheds-Direct.html
>>
>> And that would be a little more scalable because you wouldn't get a
>> separate IO thread for each parallel computation.  But, to be safe-haskell
>> compliant, we don't currently expose IO capabilities. I can add another
>> module that exposes this capability if you are interested...
>>
>>   -Ryan
>>
>> On Fri, Sep 28, 2012 at 4:48 PM, Alexander Solla <[email protected]>wrote:
>>
>>>
>>>
>>> On Fri, Sep 28, 2012 at 11:01 AM, Greg Fitzgerald <[email protected]>wrote:
>>>>
>>>>
>>>> I also tried Control.Parallel.Strategies [2].  While that route works,
>>>> I had to use unsafePerformIO.  Considering that IO is for sequencing
>>>> effects and my IO operation doesn't cause any side-effects (besides
>>>> hogging a file handle), is this a proper use of unsafePerformIO?
>>>>
>>>
>>> That's actually a perfectly fine use for unsafePerformIO, since the IO
>>> action you are performing is pure and therefore safe (modulo your file
>>> handle stuff).
>>>
>>> unsafePerformIO is a problem when the IO action being run has side
>>> effects and their order of evaluation matters (since unsafePerformIO will
>>> cause them to be run in an "unpredictable" order)
>>>
>>> One common use for unsafePerformIO is to run a query against an external
>>> library.  It has to be done in the IO monad, but it is a "pure" computation
>>> insofar as it has no side-effects that matter.  Doing this lets us promote
>>> values defined in external libraries to bona fide pure Haskell values.
>>>
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> [email protected]
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> [email protected]
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to