aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-08-31 23:11:11 -0400
committerGravatar Peter McGoron 2025-08-31 23:11:11 -0400
commit468316bae74c611c15e4d1b719b522672b80cc5c (patch)
treed3e1cbd328479d63a78d8bb221bc6fd5c9cbdce6 /README.md
parentmake conditionals procedures (diff)
draft of R7RS libraries
Diffstat (limited to 'README.md')
-rw-r--r--README.md17
1 files changed, 11 insertions, 6 deletions
diff --git a/README.md b/README.md
index 58e0273..641ebfb 100644
--- a/README.md
+++ b/README.md
@@ -7,18 +7,23 @@
>
> -- Revisedⁿ Reports on the Algorithmic Language Scheme (n ≥ 3, 1986–)
-This is a library that exports interfaces similar to the R7RS, except
-everything is call-by-need and not call-by-value: there is no need to
-explictly use `delay` or `delay-force` (in most scenarios). Procedures
-can be written in ways that look almost identical to regular Scheme. The
-procedures return promises which can be forced by non-lazy code. Hence
-lazy and non-lazy code can co-exist.
+HaScheme is a pure, call-by-need dialect of Scheme (R7RS), embedded within
+Scheme itself. Procedures in HaScheme can be written in ways that look
+identical to regular Scheme. These procedures return promises which can
+be forced by non-lazy code. Hence lazy and non-lazy code can co-exist.
*Every* procedure in HaScheme is lazy. Values are forced in conditionals,
or explicitly using `seq`. This allows for the call-by-value semantics
of Scheme to be turned into call-by-need semantics without any syntactic
cruft.
+Why use this?
+
+1. To have fun playing around with functional infinite data structures.
+2. To embed lazy and pure algorithms into impure Scheme with ease.
+3. To show those dirty Haskellers that you don't need no stinkin'
+ static type system.
+
## Fun (or Pain) with Laziness
You need to be careful with lazy functions because they can cause