aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TUTORIAL.md40
-rw-r--r--src/type/check.rs4
2 files changed, 42 insertions, 2 deletions
diff --git a/TUTORIAL.md b/TUTORIAL.md
index 7389d55..9494859 100644
--- a/TUTORIAL.md
+++ b/TUTORIAL.md
@@ -34,6 +34,46 @@ Decimals are truncated in division:
```
+**Booleans**
+
+Myslip supports booleans and `and`, `or`, `xor` and `not`
+for their comparisons.
+```console
+> true
+true : Bool
+> false
+false : Bool
+> (and true true)
+true : Bool
+> (or true false)
+true : Bool
+> (xor true true)
+false : Bool
+> (not true)
+false : Bool
+```
+
+
+**Integer comparisons**
+
+To generate booleans from integers, some basic and quite
+self-explanatory operators are supplied.
+```console
+> (> 2 1)
+true : Bool
+> (< 1 2)
+true : Bool
+> (>= 1 1)
+true : Bool
+> (<= 1 1)
+true : Bool
+> (= 1 1)
+true : Bool
+> (!= 1 1)
+false : Bool
+```
+
+
**Lists**
Lists in myslip correspond to what is known as tuples in many
diff --git a/src/type/check.rs b/src/type/check.rs
index d678411..81a43a4 100644
--- a/src/type/check.rs
+++ b/src/type/check.rs
@@ -64,7 +64,7 @@ impl SExp {
/// assert_eq!(Atom(And).type_check(), Ok(arr(List(vec![Boolean, Boolean]), Boolean)));
/// assert_eq!(Atom(Or) .type_check(), Ok(arr(List(vec![Boolean, Boolean]), Boolean)));
/// assert_eq!(Atom(Xor).type_check(), Ok(arr(List(vec![Boolean, Boolean]), Boolean)));
- /// assert_eq!(Atom(Not).type_check(), Ok(arr(Boolean, Boolean)));
+ /// assert_eq!(Atom(Not).type_check(), Ok(arr(List(vec![Boolean]), Boolean)));
/// ```
///
/// Though perhaps the most important task of the type system
@@ -147,7 +147,7 @@ impl SExp {
Atom(Eq | Neq | Lt | Gt | Le | Ge) =>
Ok(arr(List(vec![Integer, Integer]), Boolean)),
Atom(Or | And | Xor) => Ok(arr(List(vec![Boolean, Boolean]), Boolean)),
- Atom(Not) => Ok(arr(Boolean, Boolean)),
+ Atom(Not) => Ok(arr(List(vec!(Boolean)), Boolean)),
Atom(Nil) => Ok(List(vec![])),
Atom(Quote) => Ok(arr(
VarType("T".to_string()),