A major mode to try and improve the purescript repl experience within emacs.
Major mode for purescript’s repl psci.
Based on comint-mode (command interpreter). Following this tutorial.
The purescript-mode (forked from haskell-mode) does not provide any repl integration (yet?). The experience inside the terminal is somewhat tedious at the moment. So I thought of giving it a shot.
How about now? (work in progress)
Many different installation possible:
Clone the repository, and:
M-x package-install-file RET /path/to/emacs-psci/psci.el
Note Provided you already use melpa, the needed deps should be installed.
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages") t)
(package-initialize)
Note Providing PR is merged.
(require 'package)
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t
(package-initialize)
(require 'package)
(add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/"))
(package-initialize)
With melpa, melpa-stable, marmalade:
M-x package-install RET psci RET
M-x el-get-install RET psci RET
Note Providing PR is merged.
M-x psci
This will open a psci repl within emacs from your current project root folder (using projectile or project.el to determine that).
Add the inferior-psci-mode to the purescript-mode will permit access to some default bindings:
(add-hook 'purescript-mode-hook 'inferior-psci-mode)
I encounter (thanks to @purcell) a simple mode that I quite like which is called repl-toggle. This permits, using the same universal binding `C-c C-z`, to go back and forth between the repl and the buffer.
(require 'repl-toggle)
(require 'psci)
(add-to-list 'rtog/mode-repl-alist '(purescript-mode . psci))
Default bindings available from a purescript buffer:
Keybindings | Interactive commands | Description |
---|---|---|
C-c C-l | M-x psci/load-current-file! | Equivalent of `:m /path/to/current/module/file.purs` - Load <file> for importing |
C-c M-n | M-x psci/load-module! | Equivalent of `:i your.current.module.name` - Import <module> for use in PSCI |
C-c C-r | M-x psci/load-project-modules! | Load or reload files defined in the project file .psci |
N/A | M-x psci/reset! | Equivalent of `:r` - Reset |
N/A | M-x psci/quit! | Equivalent of `:q` - Quit |
C-c C-z | Provided you use the previous setup, this will switch back and forth between repl and buffer |
A purescript dev platform ready. I based this development on the online book https://leanpub.com/purescript/.
More than welcome. Send me a PR and I will gladly merge it.
Simply, use fork, branch, and rebase to the latest commit. Also, I prefer code that is understandable (ymmv) and doc-stringified.
Issues, there will be.
Open issues on the tracker, I’ll do my best to answer.
Just, be sure to be clear, complete and concise about what your trouble is.
I’m open to suggestions but I’m far from being omniscient. Please, add information links, this helps everyone.
I tend to rely on other people’s code. That’s why I use a lot of dependencies. I’ll remove the unnecessary dependencies (for the moment, none but surely, some code can be rewritten without the deps) later.