mirror of
https://github.com/quantum9Innovation/suntheme.git
synced 2024-11-24 17:33:52 -08:00
42af799d0f
in preparation for merge
57 lines
2.1 KiB
Markdown
57 lines
2.1 KiB
Markdown
# Suntheme
|
|
|
|
Runs a script on sunrise and sunset, written in pure Haskell
|
|
|
|
---
|
|
|
|
You may be wondering how a program written in Haskell, the purely functional
|
|
programming language, could possibly act on the real world by running a so-called "script."
|
|
|
|
It's simple. We take in the entire World as an input to a pure function, the IO Monad.
|
|
It then maps the original World to a new (generated) World, with our desired IO actions carefully applied with mathematical precision.
|
|
|
|
> From the second perspective, an IO action transforms the whole world. IO actions are actually pure, because they receive a unique world as an argument and then return the changed world.
|
|
|
|
See [this](https://lean-lang.org/functional_programming_in_lean/monads/io.html) for more information.
|
|
|
|
## Hacking on suntheme
|
|
|
|
It's trivial to get started with suntheme development thanks to [Nix](https://nixos.org/), the purely functional package manager.
|
|
Naturally, we leverage it as our primary package manager, both for Hackage and development tools like language servers and the like.
|
|
|
|
First, install Nix through your preferred avenue or local system administrator. If unsure, we recommend [the Determinate Nix Installer](https://github.com/DeterminateSystems/nix-installer).
|
|
Make sure flakes and nix-command are enabled (the Determinate Installer will enable them by default).
|
|
|
|
Once you have `nix`, simply type:
|
|
|
|
```bash
|
|
nix develop
|
|
```
|
|
|
|
Say yes to any prompts asking you to allow substituters or trust public keys.
|
|
Nix will fetch all of the required packages, such as GHC and Hackage dependencies.
|
|
Additionally, you will have access to `hlint` and the `haskell-language-server`.
|
|
|
|
To create a build, type
|
|
|
|
```bash
|
|
nix build
|
|
```
|
|
|
|
A binary will be produced in `result/bin/suntheme`.
|
|
|
|
To make `suntheme` available in the shell without outputting to `result`, use
|
|
|
|
```bash
|
|
nix shell
|
|
```
|
|
|
|
This will build a binary just like `nix build` but add it temporarily to the PATH, so you can just type `suntheme`.
|
|
|
|
To build and run `suntheme` immediately without adding it to the PATH, use
|
|
|
|
```bash
|
|
nix run
|
|
```
|
|
|
|
This will build a binary just like `nix shell` but immediately execute it.
|