[Haskell-cafe] Re: Debugging partial functions by the rules

Donald Bruce Stewart dons at cse.unsw.edu.au
Fri Nov 17 02:13:24 EST 2006


dons:
> dmhouse:
> > On 16/11/06, oleg at pobox.com <oleg at pobox.com> wrote:
> > >And if we are absolutely positive that the value is (Just x),
> > >we can always write
> > >        maybe (assert False undefined) id v
> > 
> > It should be pointed out that Data.Maybe does export a less well-known
> > function, fromMaybe:
> > 
> > fromMaybe z = maybe z id
> > 
> > This can be used to make the 'maybe X id' case a bit tidier (although
> > technically it's not a save on characters).
> 
> How controversial would a proposal to {-# DEPRECATE fromJust #-} be, in
> favour of:
> 
>     Just _ = x  -- which will give you the precise line number
> 
>     maybe (assert False)
> 
>     maybe id
> 
>     fromMaybe
> 
> It seems to me this is one cause of mysterious newbie errors we 
> could easily discourage, with little harm.

Btw, I'm not seriously suggesting removing it ;) 
It could be discouraged ever so slightly in the haddocks though.

I'd encourage those worried about fromJust not to use it though, and
perhaps try:

    import Debug.Trace.Location
    fromMaybe (failure assert "my just was nothing") 
              (Nothing :: Maybe ())

    $ ./a.out
    *** Exception: A.hs:5:34-39: my just was nothing

instead of:

    fromJust (Nothing :: Maybe ())

    $ ./a.out
    *** Exception: Maybe.fromJust: Nothing

While Dana and Neil work on more tools for spotting these for us.

-- Don


More information about the Haskell-Cafe mailing list