unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: swedebugia <swedebugia@riseup.net>
To: guile-user@gnu.org
Cc: "Ludovic Courtès" <ludo@gnu.org>
Subject: Explaining raising conditions and defining condition types in the guile manual
Date: Fri, 9 Nov 2018 12:46:46 +0100	[thread overview]
Message-ID: <c8c07534-3233-c0b5-189c-2359f1762113@riseup.net> (raw)

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


             reply	other threads:[~2018-11-09 11:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-09 11:46 swedebugia [this message]
2018-11-09 15:45 ` Explaining raising conditions and defining condition types in the guile manual swedebugia
2018-11-09 15:46 ` swedebugia
2018-11-09 16:09 ` Ludovic Courtès
2018-11-09 19:16   ` John Cowan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c8c07534-3233-c0b5-189c-2359f1762113@riseup.net \
    --to=swedebugia@riseup.net \
    --cc=guile-user@gnu.org \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).