# ALOE = Scheme + Smalltalk + Types

**URL:** <https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367>\
**Category:** Show & Tell\
**Created:** [September 2, 2026, 5:51pm UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367 "2026-09-02T17:51:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dharmatech](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/dharmatech/32/1996_2.png) [@dharmatech](https://racket.discourse.group/u/dharmatech)\
**Post date:** [September 2, 2026, 5:51pm UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367/1 "2026-09-02T17:51:20Z")

</div>

Hey y'all 🙋‍♂️

In Scheme, we have:

```
(proc arg ...)

```

In ALOE, it's:

```
(obj msg arg ...)

```

It's an experiment in making everything about calling methods on objects instead of applying functions. And throwing types in the mix too.

Small interpreter in 2000 lines of Racket:

> **[GitHub - dharmatech/2026-09-02-aloe-racket](https://github.com/dharmatech/2026-09-02-aloe-racket)**
>
> Contribute to dharmatech/2026-09-02-aloe-racket development by creating an account on GitHub.

It doesn't even have strings yet!  
But it can simulate a flock of 3 boids:

> <https://github.com/dharmatech/2026-09-02-aloe-racket/blob/main/examples/boids.aloe>

Spec:

> <https://github.com/dharmatech/2026-09-02-aloe-racket/blob/main/SPEC.md>

Ed

---

<div class="post-metadata">

**Author:** ![hendrikboom3](https://avatars.discourse-cdn.com/v4/letter/h/b5e925/32.png) [@hendrikboom3](https://racket.discourse.group/u/hendrikboom3)\
**Post date:** [September 2, 2026, 6:20pm UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367/2 "2026-09-02T18:20:21Z")

</div>

Isn't that what Java did already? what is being tested in this experiment?

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [September 3, 2026, 9:44am UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367/3 "2026-09-03T09:44:37Z")

</div>

Hi Ed,

This is really cool.

It makes me think of another experiment: [Purely-functional Object-Oriented System](https://okmij.org/ftp/Scheme/#pure-oo)

Thanks for sharing

Stephen

---

<div class="post-metadata">

**Author:** ![dharmatech](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/dharmatech/32/1996_2.png) [@dharmatech](https://racket.discourse.group/u/dharmatech)\
**Post date:** [September 3, 2026, 3:04pm UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367/4 "2026-09-03T15:04:30Z")

</div>

Hey @spdegabrielle 🙋‍♂️

Thanks for checking it out!

Yes, experimenting with the various object systems grown in Scheme has influenced ALOE.

---

<div class="post-metadata">

**Author:** ![dharmatech](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/dharmatech/32/1996_2.png) [@dharmatech](https://racket.discourse.group/u/dharmatech)\
**Post date:** [September 4, 2026, 6:17pm UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367/5 "2026-09-04T18:17:15Z")

</div>

OK, ALOE 0.2 is out.

For this release, the aim was to implement a basic computer algebra simplifier.

To implement that, I needed two things added to the ALOE core language:

- Protocols (class interfaces)
- Method overloading

Core language is around 2600 lines of Racket.

> <https://github.com/dharmatech/2026-09-02-aloe-racket/blob/main/docs/journal/2026-09-04-v0.2.md>

---

<div class="post-metadata">

**Author:** ![dharmatech](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/dharmatech/32/1996_2.png) [@dharmatech](https://racket.discourse.group/u/dharmatech)\
**Post date:** [September 18, 2026, 10:19am UTC](https://racket.discourse.group/t/aloe-scheme-smalltalk-types/4367/6 "2026-09-18T10:19:23Z")

</div>

In ALOE, since we have

```scheme
(obj method arg ...)

```

and we have type inference, we can get code completion for methods after typing an object expression.

Here's a video demo of this using vscode:

[![](https://global.discourse-cdn.com/free1/uploads/racket/original/2X/a/a1a7945f5fff356835f1411924cac2f8fbe20167.jpeg "ALOE : code completion") ](https://www.youtube.com/watch?v=YuIjug7elPY)

We're getting this via LSP support in ALOE.
