manifest
What a project’s package.hf says, as types: package : Package; and
what an app/X/build.hf says, build : Build.
heff reads package.hf without elaborating it,
and the same shape is checked here, for the editor and before a
package is published. Versions are a.b.c.
Require
type Require = { name : String, path : String, version : String }a package required: the name its modules are imported by, the path
it is fetched from (ending in /vN for a major N of 2 or more), and
its least version
Replace
type Replace = { name : String, dir : String }a required package taken from a directory instead
Package
type Package = { module : String , heff : String , require : List Require = [] , replace : List Replace = [] }a project: its path, the least heff it is for, what it requires, and which of those it takes from directories (none, where left out)
Backend
data Backend = C | Pagewhat a program is compiled to: C (by zig cc), or a script for a
page
Build
type Build = { backend : Backend , run : String , ships : List String = [] , fuel : Bool = False , includeDirs : List String = [] , libDirs : List String = [] }a program, app/X/main.hf: its computation run, what it is compiled
to, and the files and directories of the project’s root it ships
(app/X/build.hf; none, where left out) — heff install puts them in
the heff home with it, beside bin/, in place of what was there — and
whether it is built with fuel (False, where left out): each loop
ticked, so that std.domain’s limited stops a loop with no
operation in it, at a cost to every loop — and where the C compiler
also looks for the headers and the libraries that its modules’ C
needs (ffi’s Links), where pkg-config does not say (from the
project’s root, where relative; none, where left out)