diff options
Diffstat (limited to 'src/algebra')
-rw-r--r-- | src/algebra/Makefile.in | 2 | ||||
-rw-r--r-- | src/algebra/Makefile.pamphlet | 2 | ||||
-rw-r--r-- | src/algebra/coerce.spad.pamphlet | 21 | ||||
-rw-r--r-- | src/algebra/syntax.spad | 24 |
4 files changed, 34 insertions, 15 deletions
diff --git a/src/algebra/Makefile.in b/src/algebra/Makefile.in index 3d9371db..a974ad21 100644 --- a/src/algebra/Makefile.in +++ b/src/algebra/Makefile.in @@ -377,7 +377,7 @@ axiom_algebra_layer_0 = \ KOERCE.o KONVERT.o MSYSCMD.o ODEIFTBL.o \ OM.o OMCONN.o OMDEV.o OUT.o \ PRIMCAT.o PRINT.o PTRANFN.o SPFCAT.o \ - TYPE.o + TYPE.o UTYPE.o axiom_algebra_layer_0_nrlibs = \ $(axiom_algebra_layer_0:.$(OBJEXT)=.NRLIB/code.$(OBJEXT)) diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index c24752fb..45f1f2bd 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -205,7 +205,7 @@ axiom_algebra_layer_0 = \ KOERCE.o KONVERT.o MSYSCMD.o ODEIFTBL.o \ OM.o OMCONN.o OMDEV.o OUT.o \ PRIMCAT.o PRINT.o PTRANFN.o SPFCAT.o \ - TYPE.o + TYPE.o UTYPE.o axiom_algebra_layer_0_nrlibs = \ $(axiom_algebra_layer_0:.$(OBJEXT)=.NRLIB/code.$(OBJEXT)) diff --git a/src/algebra/coerce.spad.pamphlet b/src/algebra/coerce.spad.pamphlet index 3ad352b6..f270bba6 100644 --- a/src/algebra/coerce.spad.pamphlet +++ b/src/algebra/coerce.spad.pamphlet @@ -2,7 +2,7 @@ \usepackage{axiom} \begin{document} \title{\$SPAD/src/algebra coerce.spad} -\author{Richard Jenks, Manuel Bronstein} +\author{Richard Jenks, Manuel Bronstein, Gabriel Dos Reis} \maketitle \begin{abstract} \end{abstract} @@ -20,6 +20,24 @@ Type(): Category == with nil @ + + +\section{Category UnionType} + +<<category UTYPE 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} <<category KOERCE CoercibleTo>>= )abbrev category KOERCE CoercibleTo @@ -114,6 +132,7 @@ RetractableTo(S: Type): Category == with <<license>> <<category TYPE Type>> +<<category UTYPE UnionType>> <<category KOERCE CoercibleTo>> <<category KONVERT ConvertibleTo>> <<category RETRACT RetractableTo>> diff --git a/src/algebra/syntax.spad b/src/algebra/syntax.spad index 2dd65ccb..b6331f4f 100644 --- a/src/algebra/syntax.spad +++ b/src/algebra/syntax.spad @@ -43,7 +43,7 @@ ++ Fixme: Provide direct support for boolean values, arbritrary ++ precision float point values. Syntax(): Public == Private where - Public ==> CoercibleTo(OutputForm) with + Public ==> Join(UnionType, CoercibleTo(OutputForm)) with convert: % -> SExpression ++ convert(s) returns the s-expression representation of a syntax. @@ -55,26 +55,26 @@ Syntax(): Public == Private where coerce: Integer -> % ++ coerce(i) injects the integer value `i' into the Syntax domain - convert: % -> Integer + coerce: % -> Integer ++ coerce(i) extracts the integer value `i' from the Syntax domain coerce: DoubleFloat -> % ++ coerce(f) injects the float value `f' into the Syntax domain - convert: % -> DoubleFloat - ++ convert(f) extracts the float value `f' from the Syntax domain + coerce: % -> DoubleFloat + ++ coerce(f) extracts the float value `f' from the Syntax domain coerce: Symbol -> % ++ coerce(s) injects the symbol `s' into the Syntax domain. - convert: % -> Symbol - ++ convert(s) extracts the symbol `s' from the Syntax domain. + coerce: % -> Symbol + ++ coerce(s) extracts the symbol `s' from the Syntax domain. coerce: String -> % ++ coerce(s) injects the string value `s' into the syntax domain - convert: % -> String - ++ convert(s) extract the string value `s' from the syntax domain + coerce: % -> String + ++ coerce(s) extract the string value `s' from the syntax domain buildSyntax: (Symbol, List %) -> % ++ buildSyntax(op, [a1, ..., an]) builds a syntax object for op(a1,...,an). @@ -135,28 +135,28 @@ Syntax(): Public == Private where coerce(i: Integer): % == i pretend % - convert(i: %): Integer == + ccoerce(i: %): Integer == i case Integer => i userError "invalid conversion target type" coerce(f: DoubleFloat): % == f pretend % - convert(f: %): DoubleFloat == + coerce(f: %): DoubleFloat == f case DoubleFloat => f userError "invalid conversion target type" coerce(s: Symbol): % == s pretend % - convert(s: %): Symbol == + coerce(s: %): Symbol == s case Symbol => s userError "invalid conversion target type" coerce(s: String): % == s pretend % - convert(s: %): String == + coerce(s: %): String == s case String => s userError "invalid conversion target type" |