Discussion: add more idiomatic versions of catchJust and/or handleJust
Oliver Charles
ollie at ocharles.org.uk
Thu Jul 14 21:42:24 UTC 2016
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/
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20160714/eba5ee3e/attachment.html>
More information about the Libraries
mailing list