Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Ketil Malde
MR K P SCHUPKE <[EMAIL PROTECTED]> writes: >> As for head, I think it's fine that it throws an error because it is >> specified to be defined for only non-empty lists. > But surely it is better to encode this fact in the type system by > useing a separate type for non-empty lists. Yes, in princi

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread David Menendez
David Menendez writes: > MR K P SCHUPKE writes: > > > I would suggest using the type system as I said earlier so: > > > > toNonEmptyList :: [a] -> Maybe (NonEmpty a) > > toNonEmptyList (a0:_) = Just (NonEmpty a) > > toNonEmptyList _ = Nothing > > > > Then redefine head: > > > > head :: NonEmpt

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Fergus Henderson
On 03-Aug-2004, Alastair Reid <[EMAIL PROTECTED]> wrote: > > Another approach is to use a function: > > inContext :: String -> a -> a > > (implemented using mapException) like this: > > inContext "evaluating expression" (eval env e) > > to transform an exception of the form: > >error

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Fergus Henderson
On 03-Aug-2004, Evan LaForge <[EMAIL PROTECTED]> wrote: > > In response to the "mysterious head exceptions" thread, isn't there a way to > compile with profiling and then get the rts to give a traceback on exception? There is, but it doesn't really work properly, due to - lazy evaluation

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread MR K P SCHUPKE
>As for head, I think it's fine that it throws an error because it is >specified to be defined for only non-empty lists. But surely it is better to encode this fact in the type system by useing a separate type for non-empty lists. >Argh, no! Violating the precondition of head is a bug in the cal

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Ketil Malde
MR K P SCHUPKE <[EMAIL PROTECTED]> writes: > head :: [a] -> Maybe a > head (a0:_) = Just a0 > head _ = Nothing Argh, no! Violating the precondition of head is a bug in the caller, I want it to crash, but I also want to know where. Wrapping it up in Maybe (or any other error propagation) is not

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Graham Klyne
At 15:28 03/08/04 +0100, MR K P SCHUPKE wrote: >f (case xs of (x:_) -> x; [] -> error "whoops") -- direct style Yup, this is how I do it... I never use head! As a general principle, this bothers me. In the longer term (i.e. if and when large-scale production Haskell systems become common), and as

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Evan LaForge
> A lot of programming errors come from failure to correctly validate. This was actually nicely illustrated in my program: I assumed that digitToInt accepted '0'..'9' and wanted to rely on it throwing. After puzzling over out of range errors (other functions expected digitToInt to be in the 0..9

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread MR K P SCHUPKE
>> Is there any easy way (TH?) to amend these to output the line number Or use GHC's reifyLocation 'function' in a mapException. Keean. ___ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Alastair Reid
>Prelude.head : empty list >Prelude.read : no parse > andPrelude.(!!) : index too large > and so on. > > Is there any easy way (TH?) to amend these to output the line number > of the offending caller? In a program of any size, I usually avoid using these functions and instead

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread MR K P SCHUPKE
>f (case xs of (x:_) -> x; [] -> error "whoops") -- direct style Yup, this is how I do it... I never use head! I like to pass failures back up to the level where some kind of sensible error message can be generated. In your example the error is no better than with 'head' - the point is a Nothin

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Keith Wansbrough
> Exceptions should only really be used for unpredictcable events, I find > that the defintion of functions like head is lacking rigor... I would > prefer to see: > > head :: [a] -> Maybe a > head (a0:_) = Just a0 > head _ = Nothing In principle, yes, but in practice, that would be silly. You u

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread MR K P SCHUPKE
>Sometimes the qualification of an error changes while it is propagated. There was a discussion about this recently (on the ghc list I think)( The proposed (partial) solution is to use mapException: mapExceptionIO :: (Exception -> Exception) -> IO a -> IO a mapExceptionIO f io = Exception.catch

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Marcin 'Qrczak' Kowalczyk
W liście z wto, 03-08-2004, godz. 13:05 +0200, Bjoern Knafla napisał: > Herb Sutter gave these rules : > > An error is any failure that prevents a function from succeeding. Three > main kind of errors: [...] These kinds don't explain much. They don't give a clue which errors to report by except

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Bjoern Knafla
Hi - I am just learning Haskell and am far away from exception handling intricacies. However I just recently read an article of Herb Sutter about exception handling in C++ with some rules when to use exception handling - and perhaps these rules might be applicable to Haskell too (article: "When

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Ketil Malde
Graham Klyne <[EMAIL PROTECTED]> writes: > 2. I like to distinguish between "expected errors" and "unexpected > errors". Having been burned in the past by using exceptions (not FP), > I try to use them only for conditions that are truly unexpected; > i.e. _exceptional_. Bad input, IMO, is someth

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread Graham Klyne
Two observations: 1. When I recently modified the HaXml XML parser, this is one of the significant changes I made: providing (alterantive) return values based on Either, so that input errors could be handled by the invoking function, without forcing it into the IO monad. I guess that's a vote

Re: [Haskell-cafe] exceptions vs. Either

2004-08-03 Thread MR K P SCHUPKE
A lot of programming errors come from failure to correctly validate. I remember being taught to validate on input _and_ validate when you use a value. So I would say do both - use maybe for input functions, and exceptions for when you use a value. You can use the type system to make this more effic