Discussion: add more idiomatic versions of catchJust and/or handleJust

David Feuer david.feuer at gmail.com
Thu Jul 14 20:52:32 UTC 2016


Handle is no good because it clashes with file handles. How about Reaction?

On Jul 14, 2016 1:53 PM, "Andreas Abel" <andreas.abel at ifi.lmu.de> wrote:

> Maybe rather
>
>   data Handle a = Rethrow | Handle (IO a)
>
> !?
> On 14.07.2016 19:12, David Feuer wrote:
>
>> That makes sense, I guess. Something like
>>
>> data Handle a = Rethrow | Catch (IO a)
>>
>> I suppose? My names are awful though.
>>
>>
>> On Jul 14, 2016 12:56 PM, "Oliver Charles" <ollie at ocharles.org.uk
>> <mailto:ollie at ocharles.org.uk>> wrote:
>>
>>
>>
>>     On Tue, 12 Jul 2016, 1:23 a.m. David Feuer, <david.feuer at gmail.com
>>     <mailto:david.feuer at gmail.com>> wrote:
>>
>>         The catchJust and handleJust functions seem a bit weird and
>>         unidiomatic.
>>
>>         catchJust
>>                  :: Exception e
>>                  => (e -> Maybe b)         -- ^ Predicate to select
>>         exceptions
>>                  -> IO a                   -- ^ Computation to run
>>                  -> (b -> IO a)            -- ^ Handler
>>                  -> IO a
>>         catchJust p a handler = catch a handler'
>>            where handler' e = case p e of
>>                                  Nothing -> throwIO e
>>                                  Just b  -> handler b
>>
>>         This takes two functions and then puts them together. I would
>>         think the more natural API would be
>>
>>         catchMaybe :: Exception e => IO a -> (e -> Maybe (IO a)) -> IO a
>>         catchMaybe m handler = catch m handler' where
>>            handler' e = fromMaybe (throwIO e) (handler e)
>>
>>     A point don't feel super strongly about, but feel I should raise, is
>>     that Nothing seems to be somewhat confusing. catchJust
>>     (\FileNotFound -> Nothing) seems to suggest that if FileNotFound
>>     occurs then nothing will happen, that is - the exception is ignored.
>>     However, that is not the case, rather than Nothing happening
>>     something certainly happens - an exception is (re)thrown!
>>
>>     Whether or not this confusion is likely to happen in practice I
>>     don't know, but it suggests a type isomorphic to Maybe is a better
>> fit.
>>
>>     Ollie
>>
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>>
>
> --
> Andreas Abel  <><      Du bist der geliebte Mensch.
>
> Department of Computer Science and Engineering
> Chalmers and Gothenburg University, Sweden
>
> andreas.abel at gu.se
> http://www2.tcs.ifi.lmu.de/~abel/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20160714/be03e4ad/attachment.html>


More information about the Libraries mailing list