mirror of
https://github.com/anoma/juvix.git
synced 2024-12-14 17:32:00 +03:00
9a4da4cab8
This PR introduces an evaluator for the Geb STLC interface/fragment and
other related commands, including a REPL to interact with his backend.
-
https://github.com/anoma/geb/blob/mariari/binaries/src/specs/lambda.lisp
We have included a REPL and support for commands such as read and eval
here. Check out:
```
juvix dev geb --help
```
- [x] Add Geb evaluator with the two basic eval strategies.
- [x] Add quasi quoter: return morphisms from typed geb values.
- [x] Add type/object inference for morphisms.
- [x] All combined: morphisms-eval-to-morphisms
- [x] Parse and pretty printer Geb values (without quoting them)
- [x] Parse files containing Geb terms:
- [x] Saved in a .lisp file according to anoma/geb example (typed
object).
- [x] Store in a .geb file simple as simple lisp expression.
- [x] Add related commands to the CLI for `dev geb`:
- [x] Subcommand: eval
- [x] Subcommand: read
- [x] Subcommand: infer
- [x] Subcommand: repl
- [x] Subcommand: check
- [x] Minor changes `hom` by `!->` in the Geb prettyprinter
- [x] Add tests for:
- [x] New subcommand (smoke tests)
- [x] Eval
Issues to solve after merging this PR:
- Add location to Geb ast for proper error location.
- Add tests for all related subcommands, e.g. check, and infer.
- Check compilation from Core to Geb: (run inferObject with the type
provided by the core node).
- [x] Update the vs code-plugin to load Geb repl and eval.
(31994c8684
)
34 lines
1.2 KiB
Haskell
34 lines
1.2 KiB
Haskell
module Commands.Dev
|
|
( module Commands.Dev,
|
|
module Commands.Dev.Options,
|
|
)
|
|
where
|
|
|
|
import Commands.Base
|
|
import Commands.Dev.Asm qualified as Asm
|
|
import Commands.Dev.Core qualified as Core
|
|
import Commands.Dev.DisplayRoot qualified as DisplayRoot
|
|
import Commands.Dev.Geb qualified as Geb
|
|
import Commands.Dev.Highlight qualified as Highlight
|
|
import Commands.Dev.Internal qualified as Internal
|
|
import Commands.Dev.MiniC qualified as MiniC
|
|
import Commands.Dev.Options
|
|
import Commands.Dev.Parse qualified as Parse
|
|
import Commands.Dev.Runtime qualified as Runtime
|
|
import Commands.Dev.Scope qualified as Scope
|
|
import Commands.Dev.Termination qualified as Termination
|
|
|
|
runCommand :: (Members '[Embed IO, App] r) => DevCommand -> Sem r ()
|
|
runCommand = \case
|
|
Highlight opts -> Highlight.runCommand opts
|
|
Parse opts -> Parse.runCommand opts
|
|
Scope opts -> Scope.runCommand opts
|
|
Internal opts -> Internal.runCommand opts
|
|
MiniC opts -> MiniC.runCommand opts
|
|
Termination opts -> Termination.runCommand opts
|
|
Core opts -> Core.runCommand opts
|
|
Geb opts -> Geb.runCommand opts
|
|
Asm opts -> Asm.runCommand opts
|
|
Runtime opts -> Runtime.runCommand opts
|
|
DisplayRoot opts -> DisplayRoot.runCommand opts
|