Skip to content
heff

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 | Page

what 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)