swedebugia
2018-11-09 11:46:46 UTC
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.
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
Cheers
Swedebugia