
On Saturday 18 November 2006 00:37, Neil Mitchell wrote:
Hi
How controversial would a proposal to {-# DEPRECATE fromJust #-} be, in favour of:
Just _ = x -- which will give you the precise line number
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 strongly disagree. If we are removing things that confuse newbies why not start with higher rank types, MPTC's and GADT's ;)
fromJust is simple, useful and clear. What you mean is that implementations aren't very good at debugging this. It seems unfair to blame partial functions for the lack of a debugger. If a call stack was automatically output every time a fromJust failed would this even be something people complained about?
Well, I strongly disagree. :) I suspect I would be classified as a newbie relative to most posters on this list but here's my thoughts anyway... I chose to learn haskell largely because I thought the static type safety would help eliminate bugs, I've never once been happy when I've needed to fire up a debugger or add trace statements and I hoped they would become things of the past. One of my initial responses to haskell was disappointment upon seeing head, fromJust and the like. 'Those look nasty', I sez to meself. From day one I've tried to avoid using them. Very occasionally I do use them in the heat of the moment, but it makes me feel unclean and I end up having to take my keyboard into the bathroom for a good scrubbing with the sandsoap. The disappointment has pretty much changed to frustration since reading Oleg, and others, type-hackery work. I realise the problems are just poor/limited usage of haskell, not inherent in the language. Unfortunately I can understand the 'right' solutions but still have trouble formulating them myself. I'm hoping that if I hang out in the type-hackery 'hot zone' long enough I'll start emitting enough picoOlegs myself to solve simple problems. ;) My view is that if I can reason about my program and know a static property I want to be able to stamp this into the types and have my reasoning validated during compilation. But existing library code with weak typesafety is a large inertial mass, when trying to do something 'right' the interfacing is a daunting prospect. In general I'd rather have effort go into promoting 'right' solutions, and making those solutions easier to express, than going into debuggers for 'wrong' solutions. Daniel