From 264e81758fe4932f139819192302f4900ae1e447 Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Wed, 5 Nov 2025 13:43:11 +0100 Subject: add help panel to the REPL --- lambda-calcul/haskell/public/minilang.css | 36 +++++++++++++++++++- lambda-calcul/haskell/public/repl.html | 55 +++++++++++++++++++++++++++++-- lambda-calcul/haskell/public/repl.js | 12 +++++++ 3 files changed, 100 insertions(+), 3 deletions(-) (limited to 'lambda-calcul/haskell/public') diff --git a/lambda-calcul/haskell/public/minilang.css b/lambda-calcul/haskell/public/minilang.css index 546eb69..0bfd397 100644 --- a/lambda-calcul/haskell/public/minilang.css +++ b/lambda-calcul/haskell/public/minilang.css @@ -63,7 +63,7 @@ div.command { background-color: #faa; } -.command img { +img.connect { display: inline-block; vertical-align: middle; height: 2em; @@ -134,3 +134,37 @@ tr:nth-child(even) { .fail { background-color: red; } + +span#helptip { + display: inline-block; + background-color: orange; + width: .9em; + height: .9em; + font-size: 60%; + border-radius: 10pt; + padding: .2em; + cursor: pointer; + vertical-align: top; +} + +div#help { + background-color: white; + overflow-y: auto; + padding: 1em; + width: 80vw; + height: 70vh; + border: 1px solid black; + margin: auto; + z-index: 10; + position: fixed; + top: 15vh; + left: 10vw; + display: none; +} + +code { + background-color: #222; + color: #ddd; + padding: 1pt 2pt; + font-family: Inconsolata, Courier; +} diff --git a/lambda-calcul/haskell/public/repl.html b/lambda-calcul/haskell/public/repl.html index ee24236..a6c5e78 100644 --- a/lambda-calcul/haskell/public/repl.html +++ b/lambda-calcul/haskell/public/repl.html @@ -11,7 +11,7 @@ -

λ-Calculus Terminal

+

λ-Calculus Terminal ?

@@ -21,10 +21,61 @@
- +
+
+

Minilang REPL Help

+

This is a read-eval-print loop (REPL) for the Minilang λ-calculus interpreter.

+

Connecting to the Interpreter

+

Click the Connect Icon icon to connect to the interpreter. Once connected, the input box border will turn green.

+

Entering Commands

+

Type your Minilang commands into the input box and press Enter to execute them. The results will be displayed below. Available commands can be found by typing :help, the most important ones being:

+
+
:help
+
Display this help message.
+
:clear
+
Clear the REPL output and environment. All definitions will be removed.
+
:env
+
Display the current environment with all defined variables and their values.
+
:lang language
+
Switch the interpreter to the specified language mode. Supported values are Untyped or Typed. + By default the REPL is interpreting the untyped version.
+
+ +

Disconnecting

+

To disconnect from the interpreter, click the Disconnect Icon icon. The input box border will turn red.

+

Entering Programs

+

+ The left hand panel is a "terminal" for entering whole programs. Once you're happy with your program you can click on the Send + button, the program will be sent as is to the server and its evaluation result will appear below the command panel. +

+

Syntax

+

The syntax is based on s-expressions, e.g. like LISP, Scheme or Clojure. The semi-formal grammar of expressions (or <term>) is given by the following rules:

+
+
<symbol>
+
A symbol is a sequence of letters and some symbols ('-', '_', '*', '#', '%', '&', ':', '@', '/')
+ +
(<term> <term>+)
+
An application expression: needs at least 2 terms, and terms are applied from left to right.
+ +
(lam (<symbol>+) <term>)
+
An abstraction expression (ie. a function definition): needs at least 1 symbol
+
+

Beside expressions which are evaluated, one can enter definitions which augment the current environment and can be referred to by later expressions or definitions

+
+
(def <symbol> <term>)
+
Binds symbol to term in the current environment
+
+ +

Troubleshooting

+
    +
  • If you encounter connection issues, ensure that your internet connection is stable.
  • +
  • If commands are not executing, try reconnecting to the interpreter.
  • +
+
+ diff --git a/lambda-calcul/haskell/public/repl.js b/lambda-calcul/haskell/public/repl.js index 17be218..fd1244a 100644 --- a/lambda-calcul/haskell/public/repl.js +++ b/lambda-calcul/haskell/public/repl.js @@ -132,8 +132,20 @@ function loadText(e) { return false; }; +function toggleHelp(e) { + const help = document.getElementById("help"); + if(help.style.display === "block") { + help.style.display = "none"; + } else { + help.style.display = "block"; + } +} + + document.getElementById("command").addEventListener("keyup", sendCommand); document.getElementById("connect").addEventListener("click", connect); document.getElementById("send").addEventListener("click", loadText); +document.getElementById("helptip").addEventListener("click", toggleHelp); +document.getElementById("help").addEventListener("click", toggleHelp); connect(); -- cgit v1.3.1