[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