56 Commits

Author SHA1 Message Date
George Thomas
358b55c6e1 Minor refactor to avoid long line 2026-04-14 01:43:52 +01:00
George Thomas
c1308094f1 Combine overrides 2026-04-14 01:43:52 +01:00
George Thomas
325cb98b76 Inline project Nix file 2026-04-14 01:43:52 +01:00
George Thomas
9452f9f95a Remove unused binding 2026-04-14 01:41:48 +01:00
George Thomas
4fb40e2ed4 Simplify build script
Seeing as we now no longer need to modify generated header files.
2026-04-14 01:41:48 +01:00
George Thomas
3395fe3b1c Bump hs-bindgen to avoid header patching hack 2026-04-14 01:41:48 +01:00
George Thomas
a35380b3e9 stuff from Yuri
things I've changed from the PR:
- dropped legacy (i.e. non-flake) compat stuff, which turns out to account for most of the diff
- dropped `packages.garnet` since it doesn't work with `nix build .#garnet`
- back to using Rust-extended packages everywhere, which _seems_ fine
the rest is just re-inlining things and other refactors

final question:
it does seems a bit weird that `garnet-rs` arg to `project.nix` was always the same
might be a mistake, and we're supposed to be using local for local build?

"improve nix-haskell use"

there are a few things going on here but the main ones are ...
note that changes we keep are essentially:
- bumping `nix-haskell` to avoid shell hook workaround
- various changes in how we call `nix-haskell`
- using `libCgarnet_rs` name, which Cabal expects
- adding proper non-dev-shell targets, so that e.g. `nix run` works
2026-04-14 01:41:48 +01:00
George Thomas
c228354a13 Use nix-haskell and provide source-repository-packages to Cabal in shell 2026-03-24 16:01:44 +00:00
George Thomas
52f0a49d87 Fix build script to work correctly on clean checkout 2026-03-24 15:29:36 +00:00
George Thomas
df1f73eb8a Script the full build 2026-03-24 11:24:40 +00:00
George Thomas
6bb06b117f Symlink static lib instead of copying
This means we need to run the script much less often.
2026-03-24 11:24:40 +00:00
George Thomas
649c1b466f Revert "Ditch Bash script for custom setup"
This reverts commit 1f1c0d959da699ce04f7951ecbcdb7976c8c0750.

This doesn't work well with multi-component builds. For example, it requires `"haskell.sessionLoading": "singleComponent"` in VSCode, which makes HLS work less reliably.
2026-03-24 11:24:40 +00:00
George Thomas
b79a4c0804 Ditch Bash script for custom setup 2026-03-24 11:24:40 +00:00
George Thomas
b68d6257d3 Move bindings generation to Rust build script 2026-03-24 11:24:40 +00:00
George Thomas
b94e8ef11b Make staged imports consistent 2026-03-24 11:24:40 +00:00
George Thomas
4ecd0b16e2 Drop build hooks in favour of just using bundled libraries properly
The script addition is a bit hacky, but there's no obvious straightforward arch/version-independent way to get most of the build path. And eventually, once issues with HLS etc. are sorted out we will revert to using Cabal hooks anyway.
2026-03-23 23:06:29 +00:00
George Thomas
ddb9c300cf Switch to Hooks API instead of using cabal configure hack for lib/include dirs 2026-03-23 22:57:34 +00:00
George Thomas
718554cb2e Bump hs-bindgen for record-dot support 2026-03-19 11:34:50 +00:00
George Thomas
a018cc389a Generate header in Rust build output directory 2026-02-20 09:53:12 +00:00
George Thomas
96ec5c1cb1 Switch to Template Haskell mode for hs-bindgen 2026-02-20 09:08:16 +00:00
George Thomas
20b47594c6 Avoid IO for tree sum 2026-02-19 21:35:35 +00:00
George Thomas
71e4ffaede Make Rust tree type polymorphic 2026-02-19 21:28:00 +00:00
George Thomas
58005ee261 Refactor to use continuation monad 2026-02-19 21:18:37 +00:00
George Thomas
ca063b1dd6 Rename tree types 2026-02-19 21:11:58 +00:00
George Thomas
261acca8a4 Define nicer Rust tree type and coerce 2026-02-19 21:11:23 +00:00
George Thomas
55a781eeb8 Add tree example 2026-02-19 20:44:04 +00:00
George Thomas
06767e17ea Add newline for consistency 2026-02-19 19:37:46 +00:00
George Thomas
2a80e5b219 Minor simplification 2026-02-19 17:22:15 +00:00
George Thomas
e977181252 Avoid typedefs
This makes the header simpler, and silences `hs-bindgen` notices about "squashed" typedefs.
2026-02-19 17:22:15 +00:00
George Thomas
9ca4f615d8 Use simpler tagged union translation
Avoids the worst part of the header hack, and makes Haskell wrapper simpler.
2026-02-19 17:22:15 +00:00
George Thomas
5019af701f Mark pure function 2026-02-19 17:22:15 +00:00
George Thomas
5907a064a7 Use fixed-width integers
Even though `Int` and `isize` should be the same in practice, we can't cleanly convert, as the type information isn't quite there. And anyway, strictly speaking per the report, `Int` is only guaranteed to hold 30 bits.

Note that this is essentially unchanged even if we specify `usize_is_size_t = true` for `cbindgen`.
2026-02-19 17:19:28 +00:00
George Thomas
024b6aec87 Implement function with return value 2026-02-19 16:29:52 +00:00
George Thomas
40bb939302 Stick to Rust debug builds in shell to avoid C lib dir confusion 2026-02-19 16:29:52 +00:00
George Thomas
ddc8b9097d Avoid absolute path hack 2026-02-19 16:29:52 +00:00
George Thomas
25875c7dc1 Move Haskell package to top level 2026-02-19 16:29:52 +00:00
George Thomas
2bab0ff94e Rename Haskell.nix flake input 2026-02-19 16:29:52 +00:00
George Thomas
7d90990b74 Bump flake inputs 2026-02-19 16:29:52 +00:00
George Thomas
56370bb8a4 Reformat 2026-02-19 16:29:52 +00:00
George Thomas
b9e2e59174 Refactor Nix flake inputs 2026-02-19 16:29:52 +00:00
George Thomas
97a4f1c359 Disable dead code warning for whole Rust file 2026-02-19 16:29:52 +00:00
George Thomas
d8c12b5418 Call struct function with different arguments 2026-02-19 16:29:52 +00:00
George Thomas
0e54cccd74 Create manual high level wrapper 2026-02-19 16:29:52 +00:00
George Thomas
f1ec06fcca Add Bash script dependencies to Nix shell 2026-02-19 16:29:52 +00:00
George Thomas
13b9324bc4 Simplify use sites by passing by value 2026-02-19 16:29:52 +00:00
George Thomas
5f1e49c4ce Use ByteString 2026-02-19 16:29:52 +00:00
George Thomas
7e09c1d681 Add more complex data types 2026-02-19 16:29:52 +00:00
George Thomas
0a1911862f Expose explicit C interface
We drop the tools specifically designed for Haskell and Rust together, in favour of general tools for using each with C.

Namely, we use Mozilla's `cbindgen` for generating header files from the Rust source, and Well-Typed's new `hs-bindgen` tool for generating Haskell from those header files.

The Rust code here is essentially the result of expanding the old macro, then inlining and renaming internals.

The most important thing here is that we're now relying solely on robust well-maintained tools.
2026-02-19 16:29:41 +00:00
George Thomas
60f5f23b2d Move Haskell executable in to subdirectory 2026-02-19 13:57:14 +00:00
George Thomas
400960b0be Remove empty other-modules 2026-02-19 13:57:14 +00:00