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