unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Explaining raising conditions and defining condition types in the guile manual
@ 2018-11-09 11:46 swedebugia
  2018-11-09 15:45 ` swedebugia
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: swedebugia @ 2018-11-09 11:46 UTC (permalink / raw)
  To: guile-user; +Cc: Ludovic Courtès

Hi

I'm digging deep in the source of Guix ATM.

Reading in the Guile manual I did not find a section describing this use 
of exceptions:

(raise (condition (...

^ used by Ludo here: 
http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/mapped-devices.scm#n145

It seems elegant and nice and maybe a generic example based on it could 
fit somewhere in the manual. :)

By searching for "&message" i at last found the implementation detailing 
r6ns exceptions in the guile manual but there were no examples or prose 
explaining what they are good for.

I also found this definition tucked away in a corner of the guix source 
<http://git.savannah.gnu.org/cgit/guix.git/tree/guix/utils.scm#n806> of 
two custom condition-types used in guix:


(define-condition-type &error-location &error
   error-location?
   (location  error-location)) ;<location>

(define-condition-type &fix-hint &condition
   fix-hint?
   (hint condition-fix-hint))                      ;string

--

I found this copyrighted explanation outside the manual 
<https://www.scheme.com/tspl4/exceptions.html> though:


      Section 11.2. Defining Condition Types

While a program may pass raise or raise-continuable any Scheme value, 
the best way to describe an exceptional situation is usually to create 
and pass a /condition object/. Where the Revised^6 Report requires the 
implementation to raise exceptions, the value passed to the current 
exception handler is always a condition object of one or more of the 
standard /condition types/ described in Section 11.3 
<https://www.scheme.com/tspl4/exceptions.html#g150>. User code may 
create a condition object that is an instance of one or more standard 
condition types or it may create an extended condition type and create a 
condition object of that type.

Condition types are similar to record types but are more flexible in 
that a condition object may be an instance of two or more condition 
types, even if neither is a subtype of the other. When a condition is an 
instance of multiple types, it is referred to as a /compound condition/. 
Compound conditions are useful for communicating multiple pieces of 
information about an exception to the exception handler. A condition 
that is not a compound condition is referred to as a /simple condition/. 
In most cases, the distinction between the two is unimportant, and a 
simple condition is treated as if it were a compound condition with 
itself as its only simple condition.
-- 
Cheers
Swedebugia


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-11-09 19:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-09 11:46 Explaining raising conditions and defining condition types in the guile manual swedebugia
2018-11-09 15:45 ` swedebugia
2018-11-09 15:46 ` swedebugia
2018-11-09 16:09 ` Ludovic Courtès
2018-11-09 19:16   ` John Cowan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).