To my suggestion on the error messages
Ketil Malde <[EMAIL PROTECTED]>  writes

> [..]
>  e.g instead of Hugs' Prelude head:
>
>        head             :: [a] -> a
>        head (x:_)        = x
>
> we can use:
>
>        head             :: [a] -> a
>        head []           = error "Error: taking the 'head' of an empty list"
>        head (x:_)        = x


The Haskell implementation I use reports something of this sort.
But this does not help.
Also  "head []"   is the only error that may happen to `head'.

I wrote that, generally, for the Prelude Functions, it would help in 
error messages to print some part of value and type expression. 

But with  head [],  I had, probably, mistaken. 
----------------------------------------------
Because the program for `head' itself cannot find the type of `[]';
this may hope to do other functions, where `head' is called.
Probably, we cannot improve the function `head' itself.
(?)
But the things like              take (-1) [(1,'b'),(2,'a')],  (1)
                                 let  x = 0  in  0 ^ 0,        (2)
                                 y % 0                         (3)
could produce better messages.
Here  x :: Num a => a,   y :: Integral b => b  for some  a,b.
One needs the  values  and  type expression  to be displayed.
The latter is desirable too. Because `0',`1' may denote zero, unity of
many different Num instances.
If 
  the data were of  Show  instance, 
  class Show  included the operation  showType,  with the
    reasonable standard instances,
  Show  was a superclass of  Num, 
then, one could express such type displaying in Haskell language for
the cases (2), (3).
With  `take', it is harder. 
We need the possibility of overlapping values to define
                                 take :: Show a => Int -> [a] -> [a]
that overlaps with more generic  take ::           Int -> [a] -> [a]

The first specialization would produce better error report at the 
run-time.


>  Note that take already does bomb out if given a negative argument.


And I take this `take' only as example,
---------------------------------------
for there was earlier the discussion in this mail list on how to treat
negative or too large index in `take'.


------------------
Sergey Mechveliani
[EMAIL PROTECTED]






Reply via email to