\documentclass{article} \usepackage{open-axiom} \title{\$SPAD/src/algebra coerce.spad} \author{Richard Jenks, Manuel Bronstein, Gabriel Dos Reis} \begin{document} \maketitle \begin{abstract} \end{abstract} \tableofcontents \eject \section{category TYPE Type} <>= )abbrev category TYPE Type ++ Author: Richard Jenks ++ Date Created: 14 May 1992 ++ Date Last Updated: February 12, 2012 ++ Description: The fundamental Type; Type(): Category == Join() @ \section{Category UnionType} <>= )abbrev category UTYPE UnionType ++ Author: Gabriel Dos Reis ++ Date Created: December 17, 2007 ++ Date Last Modified: December 17, 2007 ++ Description: The category of domains that act like unions. ++ UnionType, like Type or Category, acts mostly as a take that ++ communicates `union-like' intended semantics to the compiler. ++ A domain D that satifies UnionType should provide definitions ++ for `case' operators, with corresponding `autoCoerce' operators. UnionType(): Category == with nil @ \section{category KOERCE CoercibleTo} <>= )abbrev category KOERCE CoercibleTo ++ Category for coerce ++ Author: Manuel Bronstein ++ Date Created: ??? ++ Date Last Updated: 14 May 1991 ++ Description: ++ A is coercible to B means any element of A can automatically be ++ converted into an element of B by the interpreter. CoercibleTo(S:Type): Category == with coerce: % -> S ++ coerce(a) transforms a into an element of S. @ \section{category KRCFROM CoercibleFrom} <>= )abbrev category KRCFROM CoercibleFrom ++ Author: Gabriel Dos Reis ++ Date Create: November 19, 2008 ++ Date Last Modified: November 19, 2008 ++ See Also: CoercibleTo ++ Description: ++ A is coercible from B iff any element of domain B can be ++ automically converted into an element of domain A. CoercibleFrom(S: Type): Category == with coerce: S -> % ++ coerce(s) transforms `s' into an element of `%'. @ \section{category HOMOTOP HomotopicTo} <>= )abbrev category HOMOTOP HomotopicTo ++ Author: Gabriel Dos Reis ++ Date Create: November 19, 2008 ++ Date Last Modified: November 19, 2008 ++ See Also: CoercibleTo, CoercibleFrom ++ Description: ++ A is homotopic to B iff any element of domain B can be ++ automically converted into an element of domain B, and nay ++ element of domain B can be automatically converted into an A. HomotopicTo(S: Type): Category == Join(CoercibleTo S, CoercibleFrom S) @ \section{category KONVERT ConvertibleTo} <>= )abbrev category KONVERT ConvertibleTo ++ Category for convert ++ Author: Manuel Bronstein ++ Date Created: ??? ++ Date Last Updated: 14 May 1991 ++ Description: ++ A is convertible to B means any element of A ++ can be converted into an element of B, ++ but not automatically by the interpreter. ConvertibleTo(S:Type): Category == with convert: % -> S ++ convert(a) transforms a into an element of S. @ \section{category KVTFROM ConvertibleFrom} <>= )abbrev category KVTFROM ConvertibleFrom ++ Author: Gabriel Dos Reis ++ Date Create: November 19, 2008 ++ Date Last Modified: November 19, 2008 ++ See Also: ConvertibleTo ++ Description: ++ A is convertible from B iff any element of domain B can be ++ explicitly converted into an element of domain A. ConvertibleFrom(S: Type): Category == with convert: S -> % ++ convert(s) transforms `s' into an element of `%'. @ \section{category RETRACT RetractableTo} <>= )abbrev category RETRACT RetractableTo ++ Category for retract ++ Author: ??? ++ Date Created: ??? ++ Date Last Updated: November 19, 2008 ++ Related Constructor: CoercibleFrom ++ Description: ++ A is retractable to B means that some elementsif A can be converted ++ into elements of B and any element of B can be converted into an ++ element of A. RetractableTo(S: Type): Category == CoercibleFrom S with retractIfCan: % -> Union(S,"failed") ++ retractIfCan(a) transforms a into an element of S if possible. ++ Returns "failed" if a cannot be made into an element of S. retract: % -> S ++ retract(a) transforms a into an element of S if possible. ++ Error: if a cannot be made into an element of S. add retract(s) == (u:=retractIfCan s) case "failed" => error "not retractable" u @ \section{License} <>= --Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. --All rights reserved. --Copyright (C) 2007-2008, Gabriel Dos Reis. --All rights reserved. -- --Redistribution and use in source and binary forms, with or without --modification, are permitted provided that the following conditions are --met: -- -- - Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- -- - Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in -- the documentation and/or other materials provided with the -- distribution. -- -- - Neither the name of The Numerical ALgorithms Group Ltd. nor the -- names of its contributors may be used to endorse or promote products -- derived from this software without specific prior written permission. -- --THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS --IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED --TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER --OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, --EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, --PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR --PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF --LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING --NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS --SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @ <<*>>= <> <> <> <> <> <> <> <> <> @ \eject \begin{thebibliography}{99} \bibitem{1} nothing \end{thebibliography} \end{document}