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

Carter Schonwald carter.schonwald at gmail.com
Fri Jul 15 13:23:16 UTC 2016


Again, at this juncture it sounds like effort would be better spent first
writing out an alternative userland lib to understand these design ideas /
articulate their impact better

On Friday, July 15, 2016, David Thomas <davidleothomas at gmail.com> wrote:

> 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 <javascript:;>> 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
> <javascript:;>> 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
> <javascript:;>> 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
> <javascript:;>> 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
> <javascript:;>
> >>>>> <mailto:ollie at ocharles.org.uk <javascript:;>>> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>>     On Tue, 12 Jul 2016, 1:23 a.m. David Feuer, <
> david.feuer at gmail.com <javascript:;>
> >>>>>     <mailto:david.feuer at gmail.com <javascript:;>>> 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 <javascript:;>
> >>>>> 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 <javascript:;>
> >>>> http://www2.tcs.ifi.lmu.de/~abel/
> >>
> >>
> >> _______________________________________________
> >> Libraries mailing list
> >> Libraries at haskell.org <javascript:;>
> >> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >>
> >
> > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org <javascript:;>
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20160715/af97717a/attachment.html>


More information about the Libraries mailing list