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

Andreas Abel andreas.abel at ifi.lmu.de
Thu Jul 14 17:53:12 UTC 2016


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/


More information about the Libraries mailing list