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

David Thomas davidleothomas at gmail.com
Fri Jul 15 04:55:16 UTC 2016


I kinda like "ExceptionDisposition" for the type, no particular ideas
on the constructors.  Offered only in the spirit of tossing out ideas
- feel free to ignore me if it's not helpful :)

On Thu, Jul 14, 2016 at 3:20 PM, Carter Schonwald
<carter.schonwald at gmail.com> wrote:
> At this point maybe it'd be better to write out these ideas as a library and
> implement a bunch of example codes for different approaches.  Changing the
> interfaces for exception handling code is subtle stuff!
>
>
> On Jul 14, 2016 5:42 PM, "Oliver Charles" <ollie at ocharles.org.uk> wrote:
>>
>> data ExceptionHandler a = Rethrow | HandleException (IO a)
>>
>> would be my offering of paint.
>>
>> On Thu, Jul 14, 2016 at 9:52 PM David Feuer <david.feuer at gmail.com> wrote:
>>>
>>> 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/
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>


More information about the Libraries mailing list