cabal-version: 3.4
name: moonlight-planar
version: 1.1.0.0
synopsis: Native hex regions, Delaunay meshes, and exact planar algebra.
description: Native packed hexagonal cell regions and Delaunay and
constrained Delaunay triangulation as lawful
finite-set algebras, together with exact rational planar
regions, labelled common refinement, intrinsic valuations,
and polygonal Minkowski morphology. A mesh is a value of
its site set, so
union, intersection and difference return triangulations
and refinement composes after them rather than replacing
them. One structure-of-arrays half-edge mesh carries the
constrained and unconstrained layers. Private finite-DCEL
and construction kernels own trusted representations and
admitted fast paths. Public dcel and build sublibraries
expose their lawful immutable observations, typed queries,
construction, incremental edits, constraint recovery, and
refinement without duplicating those owners. Further opt-in
sublibraries expose the exact scalar core, Voronoi and
natural-neighbour dual, bounded concurrent join interpreter,
and versioned serialization surface beside the dependency-light
exact planar library; construction statistics and session
verbs live in the opt-in build component. The
dependency-light hex component provides axial
elements, arithmetic neighbours, wordwise Boolean algebra
and morphology, components, shortest distances,
restriction, and overlap-compatible gluing without DCEL or
polygon construction.
On GHC 9.14, a public cell-complex component interprets
admitted exact cell selections for Homology and Category
and lowers exact Delaunay alpha filtrations into persistent
homology; an opt-in zigzag component tracks exact topology
across independently sampled, non-nested labelled depths.
Failure is values: every refusal names its witness.
license: MIT
license-file: LICENSE
author: Blue Rose
maintainer: rosaliafialkova@gmail.com
copyright: (c) 2026 Blue Rose
category: Geometry, Math
homepage: https://github.com/PaleRoses/moonlight
bug-reports: https://github.com/PaleRoses/moonlight/issues
build-type: Simple
tested-with: GHC == 9.14.1
extra-doc-files:
README.md
CHANGELOG.md
docs/README.md
docs/development.md
docs/activation-zigzag.md
docs/regular-site-algebra.md
docs/weighted-alpha.md
docs/examples/README.md
docs/mesh-publication.md
docs/category-observatory/README.md
docs/category-observatory/moonlight-triangulation-category-observatory.svg
docs/delaunay-compare/README.md
docs/delaunay-compare/results/moonlight-delaunay-compare-small.svg
docs/persistence-rose/alpha-eclipse.md
docs/persistence-rose/README.md
docs/persistence-rose/moonlight-triangulation-alpha-eclipse.svg
docs/persistence-rose/moonlight-triangulation-persistence-rose.svg
docs/persistence-rose/moonlight-triangulation-persistence-rose.gif
docs/noctilucent-garden/README.md
docs/noctilucent-garden/noctilucent-garden.svg
docs/moonblade/README.md
docs/moonblade/moonblade.svg
docs/knight-rig/README.md
extra-source-files:
weeder.toml
docs/moonblade/rig.py
docs/knight-rig/rig.py
docs/knight-rig/package.py
test/public-components/compile-fail/*.hs
-- The retained CSV, source receipt, and big-point SVG remain beside the
-- benchmark but are not package inputs. The small documentation projection
-- is the sole published chart and is declared above.
docs/delaunay-compare/rust/Cargo.lock
docs/delaunay-compare/rust/Cargo.toml
docs/delaunay-compare/rust/src/lib.rs
ffi/include/moonlight_triangulation.h
ffi/bindings/README.md
ffi/bindings/python/pyproject.toml
ffi/bindings/python/src/moonlight_triangulation/__init__.py
ffi/bindings/python/src/moonlight_triangulation/_binding.py
ffi/bindings/python/src/moonlight_triangulation/_native_generated.py
ffi/bindings/python/src/moonlight_triangulation/errors.py
ffi/bindings/python/src/moonlight_triangulation/values.py
ffi/bindings/python/tests/test_binding.py
ffi/bindings/rust/Cargo.toml
ffi/bindings/rust/build.rs
ffi/bindings/rust/src/binding.rs
ffi/bindings/rust/src/error.rs
ffi/bindings/rust/src/lib.rs
ffi/bindings/rust/src/raw_generated.rs
ffi/bindings/rust/src/values.rs
ffi/bindings/rust/tests/binding.rs
ffi/bindings/typescript/README.md
ffi/bindings/typescript/package.json
ffi/bindings/typescript/pnpm-workspace.yaml
ffi/bindings/typescript/tsconfig.json
ffi/bindings/typescript/src/failure.ts
ffi/bindings/typescript/src/index.ts
ffi/bindings/typescript/src/internal/call.ts
ffi/bindings/typescript/src/internal/decode.ts
ffi/bindings/typescript/src/internal/native.generated.ts
ffi/bindings/typescript/src/internal/resource.ts
ffi/bindings/typescript/src/mesh.ts
ffi/bindings/typescript/src/moonlight.ts
ffi/bindings/typescript/src/morphology.ts
ffi/bindings/typescript/src/region.ts
ffi/bindings/typescript/src/resource.ts
ffi/bindings/typescript/src/values.ts
ffi/bindings/typescript/src/wire.generated.ts
ffi/bindings/typescript/test/binding.test.ts
source-repository head
type: git
location: https://github.com/PaleRoses/moonlight.git
subdir: moonlight-planar
source-repository this
type: git
location: https://github.com/PaleRoses/moonlight.git
tag: moonlight-planar-1.1.0.0
subdir: moonlight-planar
flag warnings-as-errors
description: Treat compiler warnings as errors in package validation.
default: False
manual: True
common shared-properties
default-language: GHC2021
default-extensions:
DerivingStrategies
ghc-options:
-Wall
-Wcompat
-Widentities
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wredundant-constraints
-Wpartial-fields
-Wno-missing-import-lists
if flag(warnings-as-errors)
ghc-options: -Werror
-- The hot modules that request LLVM O3 replace GHC's default optimiser
-- recipe. GHC 9.8 therefore needs its supported legacy pass manager stated
-- explicitly; LLVM 15 otherwise combines the new manager with old TBAA
-- pass flags and refuses before code generation.
if impl(ghc < 9.10)
ghc-options: -optlo-enable-new-pm=0
-- ── the tower ────────────────────────────────────────────────────────────────
-- The implementation tower separates the trusted exact scalar core from the
-- package-private paged-storage kernel. Both feed dcel-internal, followed by
-- build-internal. Public dcel and build components are restrictions of those
-- owners: they expose lawful modules without copying implementations or
-- publishing trusted constructors. Dual and construction branch independently
-- from the DCEL owner; public build composes them for hints and telemetry;
-- exact planar algebra depends only on read owners. The graph is acyclic and uses no
-- @.hs-boot@ files.
-- Exact arithmetic admits trusted finite/dyadic/normalized inputs inside the
-- package. Public exact geometry exposes only its checked restrictions.
library core
import: shared-properties
visibility: private
hs-source-dirs: src-core
exposed-modules:
Moonlight.Planar.Scalar
Moonlight.Planar.LineSideInfo
Moonlight.Planar.Point
Moonlight.Planar.Internal.Point
Moonlight.Planar.Internal.Dyadic
Moonlight.Planar.Internal.ExactRational
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
ghc-options: -fexpose-all-unfoldings
-- Native hexagonal cell algebra is a bottom component: consumers pay for one
-- packed bit per admitted cell and do not acquire DCEL, overlay, Homology, or
-- serialization dependencies merely to manipulate a hexagonal world.
library hex
import: shared-properties
visibility: public
hs-source-dirs: src-hex
exposed-modules:
Moonlight.Hex.Coordinate
Moonlight.Hex.Element
Moonlight.Hex.Region
Moonlight.Hex.Topology
other-modules:
Moonlight.Hex.Region.Internal
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, transformers >= 0.6 && < 0.7
, vector >= 0.13 && < 0.14
ghc-options: -O2 -fexpose-all-unfoldings
-- Trusted paged storage is shared by the immutable DCEL and construction
-- owners. It is private because raw page indices and unsafe vector operations
-- are valid only after those owners have admitted array bounds and page order.
library storage-internal
import: shared-properties
visibility: private
hs-source-dirs: src-core
exposed-modules:
Moonlight.Planar.BuildStats
Moonlight.Planar.Internal.BuildStats
Moonlight.Planar.Internal.PageDirectory
Moonlight.Planar.Internal.Paged
Moonlight.Planar.Internal.BoxedPaged
Moonlight.Planar.Internal.Growable
Moonlight.Planar.Internal.PackedIndex
Moonlight.Planar.Internal.FaceQueue
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
ghc-options: -fexpose-all-unfoldings
library dcel-internal
import: shared-properties
visibility: private
hs-source-dirs: src-dcel
exposed-modules:
Moonlight.Planar.Alpha
Moonlight.Planar.Types
Moonlight.Planar.Math
Moonlight.Planar.Exact
Moonlight.Planar.Curve
Moonlight.Planar.Curve.Authoring
Moonlight.Planar.Curve.Lowering
Moonlight.Planar.Curve.Region
Moonlight.Planar.Affine
Moonlight.Planar.Convex
Moonlight.Planar.Simplex
Moonlight.Planar.CellSet
Moonlight.Planar.Region
Moonlight.Planar.Valuation
Moonlight.Planar.Interop
Moonlight.Planar.Dcel
Moonlight.Planar.Payload
Moonlight.Planar.Handles.HandleDefs
Moonlight.Planar.Internal.HandleDefs
Moonlight.Planar.Handles.Dynamic
Moonlight.Planar.Handles.Scoped
Moonlight.Planar.Handles.Iterators.CircularIterator
Moonlight.Planar.Handles.Iterators.DynamicIterators
Moonlight.Planar.Handles.Iterators.FixedIterators
Moonlight.Planar.Handles.Iterators.HullIterator
Moonlight.Planar.PointLocation
Moonlight.Planar.Validation
Moonlight.Planar.Internal.Validation
Moonlight.Planar.FloodFillIterator
Moonlight.Planar.Internal.FloodFillIterator
Moonlight.Planar.IntersectionIterator
Moonlight.Planar.Internal.FaceProbe
Moonlight.Planar.Internal.CellSet
Moonlight.Planar.Internal.Incidence
Moonlight.Planar.Internal.BoundaryCycle
Moonlight.Planar.Internal.ExactSegmentEvents
Moonlight.Planar.Internal.Region.Publication
Moonlight.Planar.Internal.Region.Types
Moonlight.Planar.Internal.Region.Bounds
Moonlight.Planar.Internal.Predicates
Moonlight.Planar.Internal.SegmentRelation
Moonlight.Planar.Internal.Types
Moonlight.Planar.Internal.Representation
Moonlight.Planar.Internal.PointIndex
Moonlight.Planar.Internal.Tournament
other-modules:
Moonlight.Planar.Internal.Exact
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, primitive >= 0.9 && < 0.10
, vector >= 0.13 && < 0.14
, moonlight-planar:core
, moonlight-planar:storage-internal
ghc-options: -fexpose-all-unfoldings
-- Public immutable-DCEL and exact-geometry surface. Every module is the module
-- compiled by dcel-internal; reexporting preserves one type and implementation
-- identity while leaving representation modules hidden.
library dcel
import: shared-properties
visibility: public
reexported-modules:
Moonlight.Planar.Scalar
, Moonlight.Planar.LineSideInfo
, Moonlight.Planar.Point
, Moonlight.Planar.BuildStats
, Moonlight.Planar.Alpha
, Moonlight.Planar.Types
, Moonlight.Planar.Math
, Moonlight.Planar.Exact
, Moonlight.Planar.Curve
, Moonlight.Planar.Curve.Authoring
, Moonlight.Planar.Curve.Lowering
, Moonlight.Planar.Curve.Region
, Moonlight.Planar.Affine
, Moonlight.Planar.Convex
, Moonlight.Planar.Simplex
, Moonlight.Planar.CellSet
, Moonlight.Planar.Region
, Moonlight.Planar.Valuation
, Moonlight.Planar.Interop
, Moonlight.Planar.Dcel
, Moonlight.Planar.Payload
, Moonlight.Planar.Handles.HandleDefs
, Moonlight.Planar.Handles.Dynamic
, Moonlight.Planar.Handles.Scoped
, Moonlight.Planar.Handles.Iterators.DynamicIterators
, Moonlight.Planar.Handles.Iterators.FixedIterators
, Moonlight.Planar.Handles.Iterators.HullIterator
, Moonlight.Planar.PointLocation
, Moonlight.Planar.Validation
, Moonlight.Planar.FloodFillIterator
, Moonlight.Planar.IntersectionIterator
build-depends:
moonlight-planar:dcel-internal
, moonlight-planar:core
, moonlight-planar:storage-internal
-- Optional ordered painting and pure SVG publication. Geometry-only consumers
-- do not inherit a renderer or an additional geometric representation.
library illustration
import: shared-properties
visibility: public
hs-source-dirs: src-illustration
exposed-modules:
Moonlight.Planar.Illustration
Moonlight.Planar.Illustration.Svg
Moonlight.Planar.Illustration.Motif
Moonlight.Planar.Illustration.Layout
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, moonlight-planar:dcel
-- An ExactCellSet already carries the incidence required for generic cellular
-- lowering. This separate Homology interpretation requires GHC 9.14.
library cell-complex
import: shared-properties
visibility: public
hs-source-dirs: src-cell-complex
default-extensions:
TypeFamilies
exposed-modules:
Moonlight.Hex.CellComplex
Moonlight.Planar.CellComplex
Moonlight.Planar.LabelledComplex
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, containers >= 0.6 && < 0.9
, deepseq >= 1.5 && < 1.6
, moonlight-algebra:abstract >= 0.1 && < 0.2
, moonlight-homology >= 0.1.0.2 && < 0.2
, moonlight-homology:cell-complex >= 0.1.0.2 && < 0.2
, moonlight-planar:hex
, moonlight-planar:dcel-internal
, vector >= 0.13 && < 0.14
-- Stable activation labels induce canonical simplices across independently
-- built depth meshes. This opt-in layer owns the exact alpha ingestion and
-- adjacent-union correspondence witnesses; Homology owns the zigzag reducer.
library zigzag
import: shared-properties
visibility: public
hs-source-dirs: src-zigzag
exposed-modules:
Moonlight.Planar.Zigzag
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, containers >= 0.6 && < 0.9
, moonlight-core >= 0.1 && < 0.2
, moonlight-homology >= 0.1.0.3 && < 0.2
, moonlight-planar:build
, moonlight-planar:cell-complex
, moonlight-planar:dcel
, vector >= 0.13 && < 0.14
library build-internal
import: shared-properties
visibility: private
hs-source-dirs: src-build
exposed-modules:
Moonlight.Planar.Canonical
Moonlight.Planar.Internal.Canonical
Moonlight.Planar.Internal.Mutable
Moonlight.Planar.Internal.OperationState
Moonlight.Planar.Internal.Probe
Moonlight.Planar.Internal.DcelOperations.FlipRewrite
Moonlight.Planar.Internal.DcelOperations.Subdivide
Moonlight.Planar.Internal.DcelOperations.Twin
Moonlight.Planar.Internal.DcelOperations.FlipRule
Moonlight.Planar.Internal.DcelOperations.CandidateArena
Moonlight.Planar.Internal.DcelOperations.Legalize
Moonlight.Planar.Internal.DcelOperations.Hull
Moonlight.Planar.Internal.DcelOperations.Normalize
Moonlight.Planar.Internal.DcelOperations.Chain
Moonlight.Planar.BulkLoad
Moonlight.Planar.Internal.BulkLoad
Moonlight.Planar.Removal
Moonlight.Planar.Session
Moonlight.Planar.Internal.Session
Moonlight.Planar.Cdt
Moonlight.Planar.Refinement
Moonlight.Planar.SetAlgebra
Moonlight.Planar.Internal.Cdt.Build
Moonlight.Planar.Internal.Cdt.Query
Moonlight.Planar.Internal.Cdt.Types
Moonlight.Planar.Internal.Cdt.Union
Moonlight.Planar.Internal.Join
Moonlight.Planar.Internal.Join.Seam
other-modules:
Moonlight.Planar.Insertion
Moonlight.Planar.Internal.Capacity
Moonlight.Planar.Internal.Cdt.Admission
Moonlight.Planar.Internal.Cdt.Batch
Moonlight.Planar.Internal.Cdt.Combinators
Moonlight.Planar.Internal.Cdt.Corridor
Moonlight.Planar.Internal.Cdt.Corridor.Trace
Moonlight.Planar.Internal.Cdt.Recovery
Moonlight.Planar.Internal.Cdt.Region
Moonlight.Planar.Internal.Cdt.Segment
Moonlight.Planar.Internal.Cdt.Site
Moonlight.Planar.Internal.Cdt.Split
Moonlight.Planar.Internal.Excision
Moonlight.Planar.Internal.Location
Moonlight.Planar.Internal.CircleSweep
Moonlight.Planar.Internal.Refinement
Moonlight.Planar.Internal.Transaction
Moonlight.Planar.Internal.Join.Plan
Moonlight.Planar.Internal.Join.SiteSet
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, moonlight-algebra:join >= 0.1.1 && < 0.2
, primitive >= 0.9 && < 0.10
, vector >= 0.13 && < 0.14
, vector-algorithms >= 0.9 && < 0.10
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:storage-internal
ghc-options: -fexpose-all-unfoldings
-- Public construction surface over the private kernel. Trusted admitted-input
-- and local-transaction entries live only in build-internal; the modules below
-- are their typed, immutable restrictions. Hints and telemetry compose the
-- independent construction and dual-query owners here, not inside either one.
library build
import: shared-properties
visibility: public
hs-source-dirs: src-build-public
exposed-modules:
Moonlight.Planar.HintGenerator
Moonlight.Planar.Telemetry
reexported-modules:
Moonlight.Planar.Canonical
, Moonlight.Planar.BulkLoad
, Moonlight.Planar.Removal
, Moonlight.Planar.Session
, Moonlight.Planar.Cdt
, Moonlight.Planar.Refinement
, Moonlight.Planar.SetAlgebra
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
, moonlight-planar:core
, moonlight-planar:build-internal
, moonlight-planar:dcel-internal
, moonlight-planar:dual
, moonlight-planar:storage-internal
ghc-options: -fexpose-all-unfoldings
-- Concurrency is an effect boundary over the pure build planner. Keeping it in
-- its own sublibrary prevents @async@ from infecting the geometry core.
library parallel
import: shared-properties
visibility: public
hs-source-dirs: src-parallel
exposed-modules:
Moonlight.Planar.Parallel
build-depends:
base >= 4.19 && < 5
, async >= 2.2 && < 2.3
, deepseq >= 1.5 && < 1.6
, moonlight-algebra:join >= 0.1.1 && < 0.2
, moonlight-planar:build-internal
, moonlight-planar:dcel-internal
ghc-options: -fexpose-all-unfoldings
-- Canonical hex bytes retain the bottom component's small dependency cone.
library hex-serialize
import: shared-properties
visibility: public
hs-source-dirs: src-serialize
exposed-modules:
Moonlight.Hex.Serialization
build-depends:
base >= 4.19 && < 5
, binary >= 0.8 && < 0.9
, bytestring >= 0.12 && < 0.13
, deepseq >= 1.5 && < 1.6
, transformers >= 0.6 && < 0.7
, vector >= 0.13 && < 0.14
, moonlight-planar:hex
ghc-options: -fexpose-all-unfoldings
-- Planar bytes remain separate so a native-hex consumer does not build
-- the DCEL merely to decode one packed region.
library serialize
import: shared-properties
visibility: public
hs-source-dirs: src-serialize
exposed-modules:
Moonlight.Planar.Serialization
build-depends:
base >= 4.19 && < 5
, binary >= 0.8 && < 0.9
, bytestring >= 0.12 && < 0.13
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, transformers >= 0.6 && < 0.7
, vector >= 0.13 && < 0.14
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:storage-internal
-- The @Binary@ instances for the identifier and point types are orphans by
-- construction: the types belong to @dcel@ and the class to @binary@, and the
-- whole purpose of this component is that neither one has to know about the
-- other. Rehoming them would pull @binary@ into the core and defeat the split.
ghc-options: -fexpose-all-unfoldings -Wno-orphans
library dual
import: shared-properties
visibility: public
hs-source-dirs: src-dual
exposed-modules:
Moonlight.Planar.Voronoi
Moonlight.Planar.Voronoi.Handles
Moonlight.Planar.Interpolation
other-modules:
Moonlight.Planar.Internal.InterpolationWorkspace
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, primitive >= 0.9 && < 0.10
, vector >= 0.13 && < 0.14
, moonlight-planar:core
, moonlight-planar:dcel-internal
ghc-options: -fexpose-all-unfoldings
-- Package-private overlay machine room. The main library and package-owned
-- oracle tests share these exact modules; external consumers receive only the
-- public embedding certifier and Overlay equations reexported across this wall.
library overlay-internal
import: shared-properties
visibility: private
hs-source-dirs: src-overlay
exposed-modules:
Moonlight.Planar.Embedding
Moonlight.Planar.Internal.Overlay.Arrangement
Moonlight.Planar.Internal.Overlay.Types
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:storage-internal
library
import: shared-properties
hs-source-dirs:
src-public
exposed-modules:
Moonlight.Hex.Planar
Moonlight.Planar.Minkowski
Moonlight.Planar.Overlay
Moonlight.Planar.PowerDiagram
Moonlight.Planar.RegularAlpha
-- The default library is exact planar algebra. Scoped/owning handles are the safe
-- path; Dcel is the explicitly unchecked fixed-index kernel. These are the
-- exact focused-component modules, not facade copies.
reexported-modules:
Moonlight.Planar.Scalar
, Moonlight.Planar.LineSideInfo
, Moonlight.Planar.Point
, Moonlight.Planar.BuildStats
, Moonlight.Planar.Alpha
, Moonlight.Planar.Types
, Moonlight.Planar.Math
, Moonlight.Planar.Exact
, Moonlight.Planar.Convex
, Moonlight.Planar.CellSet
, Moonlight.Planar.Region
, Moonlight.Planar.Valuation
, Moonlight.Planar.Interop
, Moonlight.Planar.Dcel
, Moonlight.Planar.Payload
, Moonlight.Planar.Handles.HandleDefs
, Moonlight.Planar.Handles.Dynamic
, Moonlight.Planar.Handles.Scoped
, Moonlight.Planar.Handles.Iterators.DynamicIterators
, Moonlight.Planar.Handles.Iterators.FixedIterators
, Moonlight.Planar.Handles.Iterators.HullIterator
, Moonlight.Planar.PointLocation
, Moonlight.Planar.Validation
, Moonlight.Planar.FloodFillIterator
, Moonlight.Planar.IntersectionIterator
, Moonlight.Planar.Embedding
other-modules:
Moonlight.Planar.Internal.Minkowski.Operations
Moonlight.Planar.Internal.Minkowski.Types
Moonlight.Planar.Internal.PowerDiagram.Edit
Moonlight.Planar.Internal.PowerDiagram.Generator
Moonlight.Planar.Internal.PowerDiagram.Hull
Moonlight.Planar.Internal.PowerDiagram.Locality
Moonlight.Planar.Internal.PowerDiagram.Mass
Moonlight.Planar.Internal.PowerDiagram.Model
Moonlight.Planar.Internal.PowerDiagram.Projection
Moonlight.Planar.Internal.PowerDiagram.Section
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
, moonlight-planar:hex
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:overlay-internal
, moonlight-planar:storage-internal
ghc-options: -fexpose-all-unfoldings
library ffi
import: shared-properties
visibility: private
hs-source-dirs: ffi/abi
exposed-modules:
Moonlight.Planar.Foreign.Boundary
Moonlight.Planar.Foreign.Contract
Moonlight.Planar.Foreign.Contract.Render
Moonlight.Planar.Foreign.Mesh
Moonlight.Planar.Foreign.Morphology
Moonlight.Planar.Foreign.Obstruction
Moonlight.Planar.Foreign.Region
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, vector >= 0.13 && < 0.14
, moonlight-planar
, moonlight-planar:core
, moonlight-planar:build-internal
, moonlight-planar:dcel-internal
foreign-library moonlight-triangulation-c
import: shared-properties
type: native-shared
hs-source-dirs: ffi/exports
other-modules:
Moonlight.Planar.Foreign.Exports
c-sources:
ffi/cbits/moonlight_runtime.c
include-dirs:
ffi/include
install-includes:
moonlight_triangulation.h
build-depends:
base >= 4.19 && < 5
, moonlight-planar:ffi
ghc-options: -threaded
if os(windows)
options: standalone
mod-def-file: ffi/cbits/moonlight-triangulation.def
else
extra-libraries: pthread
if os(linux)
lib-version-info: 2:0:0
executable moonlight-planar-ffi-contract
import: shared-properties
hs-source-dirs: ffi/generator
main-is: Main.hs
build-depends:
base >= 4.19 && < 5
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, moonlight-planar:ffi
-- ── test slices ──────────────────────────────────────────────────────────────
-- Each slice is an ATOM: a @common@ stanza binding a spec module to the
-- dependencies and RTS options that module requires. A suite is then a choice
-- of atoms and nothing more. The coherence component below imports every atom
-- and therefore checks their combined module, instance, and dependency surface
-- without running every behavioral suite a second time.
common triangulation-test-properties
import: shared-properties
ghc-options: -O0
build-depends:
base >= 4.19 && < 5
, vector >= 0.13 && < 0.14
common triangulation-test-support-slice
other-modules: Support
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:dcel
common triangulation-mesh-fixture-slice
other-modules: Moonlight.Planar.MeshFixtures
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:build
common triangulation-overlay-fixture-slice
other-modules: Moonlight.Planar.OverlayFixtures
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar
common triangulation-native-test-slice
import: triangulation-mesh-fixture-slice, triangulation-overlay-fixture-slice
other-modules:
Moonlight.Planar.ConstructionSpec
Moonlight.Planar.ValidationSpec
Moonlight.Planar.PredicateSpec
Moonlight.Planar.NearestSpec
Moonlight.Planar.LocationSpec
Moonlight.Planar.EditSpec
Moonlight.Planar.DcelSpec
Moonlight.Planar.PayloadSpec
Moonlight.Planar.PayloadTypeErrors
Moonlight.Planar.ConstraintSpec
Moonlight.Planar.ConstrainedJoinSpec
Moonlight.Planar.ConstrainedSeamSpec
Moonlight.Planar.RefinementAssertions
Moonlight.Planar.RefinementSpec
Moonlight.Planar.AlphaSpec
Moonlight.Planar.BoundaryFixtures
Moonlight.Planar.PayloadFixtures
Moonlight.Planar.IncidenceSpec
Moonlight.Planar.FilteredPredicateOptimizationSpec
Moonlight.Planar.ExactEmbeddingSpec
Moonlight.Planar.ExactSegmentEventsSpec
Moonlight.Planar.OverlaySpec
Moonlight.Planar.OverlaySelectionSpec
Moonlight.Planar.OverlayPublicationSpec
Moonlight.Planar.OverlayAssertions
Moonlight.Planar.RegionSpec
-- The RTS options this module needs are named on the SUITES rather than
-- here, which is the one place the slice-owns-its-requirements rule cannot
-- hold. @-with-rtsopts@ is CONCATENATED by GHC across repetitions, so a
-- suite importing two slices that both name it links a binary whose RTS
-- string is the two spliced together — @-N4 -T-N4 -T@ — which the RTS
-- discards whole, silently disarming both. It must appear exactly once per
-- suite, so @triangulation-suite-rtsopts@ below carries it.
ghc-options: -threaded -rtsopts
build-depends:
containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, primitive >= 0.9 && < 0.10
, moonlight-planar:core
, transformers >= 0.6 && < 0.7
, moonlight-planar:dcel-internal
, moonlight-planar:build-internal
, moonlight-planar:dual
, moonlight-planar:overlay-internal
, moonlight-planar:storage-internal
, moonlight-planar
common triangulation-serialization-test-slice
other-modules:
Moonlight.Planar.SerializationSpec
Moonlight.Planar.SerializationV6Oracle
Moonlight.Planar.SerializationFixtures
build-depends:
binary >= 0.8 && < 0.9
, bytestring >= 0.12 && < 0.13
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, moonlight-planar:dcel-internal
, moonlight-planar:build-internal
, moonlight-planar:serialize
, moonlight-planar:storage-internal
-- The operand meshes both algebra slices are stated over. It sits at the
-- surface tier with them, so the fixtures cannot quietly acquire a
-- machine-room dependency that the law slice would then inherit.
common triangulation-algebra-fixture-slice
import: triangulation-mesh-fixture-slice
other-modules: Moonlight.Planar.AlgebraFixtures
build-depends: containers >= 0.8 && < 0.9
, moonlight-planar
, moonlight-planar:build
-- The finite-set laws, stated against the public construction owner.
common triangulation-algebra-law-slice
other-modules: Moonlight.Planar.AlgebraSpec
build-depends: containers >= 0.8 && < 0.9
, moonlight-algebra:join
, moonlight-planar
, moonlight-planar:build
-- Exact planar Boolean laws, stated through the public exact owners.
common triangulation-region-algebra-law-slice
import: triangulation-overlay-fixture-slice
other-modules: Moonlight.Planar.RegionAlgebraSpec
build-depends: containers >= 0.8 && < 0.9
, moonlight-planar
, moonlight-planar:build
-- Exact intrinsic-volume laws over the resident cell carrier and published
-- region view.
common triangulation-valuation-law-slice
import: triangulation-overlay-fixture-slice
other-modules: Moonlight.Planar.ValuationSpec
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar
common triangulation-minkowski-law-slice
other-modules:
Moonlight.Planar.MinkowskiSpec
Moonlight.Planar.ConvexSpec
build-depends:
moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar
-- A test-only endpoint-reconstruction oracle demonstrating why the production
-- clipping owner retains original affine source lines.
common triangulation-exact-clip-retention-law-slice
other-modules: Moonlight.Planar.ExactClipRetentionSpec
build-depends:
moonlight-planar:core
, moonlight-planar:dcel-internal
-- The fixed-width in-circle worker cross-checked against the arbitrary-
-- precision determinant on random, subnormal, wide-exponent, exactly
-- cocircular and one-ulp-off quadrilaterals.
common triangulation-in-circle-fixed-width-law-slice
other-modules: Moonlight.Planar.InCircleFixedWidthSpec
build-depends:
moonlight-planar:core
common triangulation-power-diagram-law-slice
other-modules:
Moonlight.Planar.RegularTopologySpec
Moonlight.Planar.RegularEditSpec
Moonlight.Planar.RegularAlphaSpec
Moonlight.Planar.PowerDiagramSpec
Moonlight.Planar.PowerFixtures
Moonlight.Planar.PowerMassSpec
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar
common triangulation-layer-operations-law-slice
import: triangulation-overlay-fixture-slice
other-modules:
Moonlight.Planar.LayerOperationsSpec
Moonlight.Planar.ExactIncidencePublicationSpec
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:storage-internal
, moonlight-planar
-- The agreement between the seam schedule and the reference rebuild. It names
-- an internal schedule, so it reaches below the wall and travels with the
-- schedule it names: a replacement kernel carries its own copy of this.
common triangulation-algebra-schedule-slice
other-modules: Moonlight.Planar.ScheduleAgreementSpec
build-depends: moonlight-planar:build-internal
, moonlight-planar
common triangulation-parallel-test-slice
other-modules: Moonlight.Planar.ParallelSpec
ghc-options: -threaded -rtsopts
build-depends: moonlight-planar:parallel
, moonlight-planar:build
test-suite moonlight-planar-cell-complex-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test/cell-complex
default-extensions:
TypeFamilies
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, containers >= 0.6 && < 0.9
, moonlight-homology >= 0.1.0.2 && < 0.2
, moonlight-homology:cell-complex >= 0.1.0.2 && < 0.2
, moonlight-planar:hex
, moonlight-planar:core
, moonlight-planar:build-internal
, moonlight-planar:cell-complex
, moonlight-planar:dcel-internal
, moonlight-planar:storage-internal
, tasty >= 1.4 && < 1.6
, tasty-hunit >= 0.10 && < 0.11
, vector >= 0.13 && < 0.14
-- Public activation ingestion, labelled adjacent-union correspondences, and
-- exact non-monotone persistence, including its compiled documentation path.
test-suite moonlight-planar-zigzag-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/zigzag
docs/examples
other-modules:
Moonlight.Planar.Example.ActivationZigzag
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, containers >= 0.6 && < 0.9
, moonlight-homology >= 0.1.0.3 && < 0.2
, moonlight-planar:dcel
, moonlight-planar:zigzag
, tasty >= 1.4 && < 1.6
, tasty-hunit >= 0.10 && < 0.11
, vector >= 0.13 && < 0.14
-- Canonical documentation examples compile exclusively against the public
-- components and retain their expected semantic summaries as executable checks.
test-suite moonlight-planar-examples-test
import: triangulation-test-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/examples
docs/examples
other-modules:
Moonlight.Planar.Example.AlphaBoundary
Moonlight.Planar.Example.ConstrainedRegion
Moonlight.Planar.Example.PlanarRegion
Moonlight.Planar.Example.SetAlgebra
build-depends: containers >= 0.8 && < 0.9
, moonlight-planar
, moonlight-planar:build
, moonlight-planar:core
, moonlight-planar:dcel
, moonlight-planar:dual
-- One behavioral owner for exact clipping, power cells, morphology, affine
-- envelopes, coverage, n-ary overlay, and mass. The law slices remain
-- independently reusable by the compile-only coherence component.
test-suite moonlight-planar-exact-planar-test
import:
triangulation-test-properties,
triangulation-test-support-slice,
triangulation-exact-clip-retention-law-slice,
triangulation-in-circle-fixed-width-law-slice,
triangulation-minkowski-law-slice,
triangulation-power-diagram-law-slice,
triangulation-layer-operations-law-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/exact-planar
test/algebra
test/support
-- A real external shape over only the two focused public components. It proves
-- that immutable observation and construction/editing compose without either
-- an umbrella facade or a private implementation token.
test-suite moonlight-planar-public-components-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test/public-components
other-modules:
Moonlight.Planar.AdmissionSpec
Moonlight.Planar.AdmissionTypeErrors
build-depends:
base >= 4.19 && < 5
, containers >= 0.6 && < 0.9
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
, moonlight-planar
, moonlight-planar:dcel
, moonlight-planar:build
test-suite moonlight-planar-curve-test
import: triangulation-test-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/curve
test/support
other-modules:
Moonlight.Planar.CurveSpec
Moonlight.Planar.Curve.AuthoringSpec
Moonlight.Planar.AffineSpec
Moonlight.Planar.CurveLoweringSpec
Moonlight.Planar.CurveLoweringTypeErrors
Moonlight.Planar.RegionAdmissionSpec
Support
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:dcel
test-suite moonlight-planar-illustration-test
import: triangulation-test-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/illustration
docs/art-common
other-modules:
Moonlight.Planar.IllustrationSpec
Moonlight.Planar.IllustrationStudySpec
Moonlight.Planar.EquationalGardenSpec
Moonlight.Planar.MotifSpec
Moonlight.Planar.LayoutSpec
Moonlight.Planar.SpaceSwordSpec
Moonlight.Planar.Exhibit.IllustrationStudy
Moonlight.Planar.Exhibit.EquationalGarden
Moonlight.Planar.Exhibit.SpaceSword
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:dcel
, moonlight-planar:illustration
executable moonlight-planar-illustration-study
import: shared-properties
main-is: Main.hs
hs-source-dirs:
docs/illustration-study
docs/art-common
other-modules:
Moonlight.Planar.Exhibit.IllustrationStudy
Moonlight.Planar.Exhibit.EquationalGarden
Moonlight.Planar.Exhibit.SpaceSword
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, moonlight-planar:dcel
, moonlight-planar:illustration
-- Native coordinate, element, finite-set, descent/gluing, exact-publication,
-- and serialization laws through public component boundaries only.
test-suite moonlight-planar-hex-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test/hex
ghc-options: -O0
build-depends:
base >= 4.19 && < 5
, bytestring >= 0.12 && < 0.13
, containers >= 0.8 && < 0.9
, moonlight-planar
, moonlight-planar:hex
, moonlight-planar:hex-serialize
, vector >= 0.13 && < 0.14
-- One pure, source-grounded projection of the alpha, dual, interpolation,
-- planar-algebra, and persistence owners. The test shares the internal exhibit
-- module; neither component creates a public visualization API.
test-suite moonlight-planar-persistence-rose-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/persistence-rose
docs/persistence-rose
other-modules:
Moonlight.Planar.Exhibit.PersistenceRose
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, bytestring >= 0.12 && < 0.13
, containers >= 0.6 && < 0.9
, moonlight-homology >= 0.1.0.2 && < 0.2
, moonlight-planar
, moonlight-planar:cell-complex
, moonlight-planar:dcel-internal
, moonlight-planar:dual
, tasty >= 1.4 && < 1.6
, tasty-hunit >= 0.10 && < 0.11
, text >= 2.0 && < 2.2
, vector >= 0.13 && < 0.14
, moonlight-planar:build
-- The single statement of the RTS environment every suite runs under: -N so
-- that the concurrent tournament has more than one capability to be scheduled
-- onto, -T so that the filtered-predicate test can read allocation counters.
-- It is one stanza rather than a line on each slice because @-with-rtsopts@
-- concatenates rather than replaces, so naming it twice in one suite produces
-- a spliced string the RTS rejects entirely. Every behavioral suite that
-- needs those capabilities imports this exactly once; the compile-only
-- coherence suite deliberately installs no runtime defaults.
common triangulation-suite-rtsopts
ghc-options: -threaded -rtsopts "-with-rtsopts=-N4 -T"
test-suite moonlight-planar-native-test
import:
triangulation-suite-rtsopts,
triangulation-test-properties,
triangulation-test-support-slice,
triangulation-native-test-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/native
test/support
test-suite moonlight-planar-serialization-test
import:
triangulation-suite-rtsopts,
triangulation-test-properties,
triangulation-test-support-slice,
triangulation-serialization-test-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/serialization
test/support
test-suite moonlight-planar-algebra-test
import:
triangulation-test-properties,
triangulation-test-support-slice,
triangulation-algebra-fixture-slice,
triangulation-algebra-law-slice,
triangulation-region-algebra-law-slice,
triangulation-valuation-law-slice,
triangulation-algebra-schedule-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/algebra
test/support
test-suite moonlight-planar-parallel-test
import:
triangulation-suite-rtsopts,
triangulation-test-properties,
triangulation-test-support-slice,
triangulation-algebra-fixture-slice,
triangulation-parallel-test-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/parallel
test/algebra
test/support
test-suite moonlight-planar-ffi-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test/ffi
build-depends:
base >= 4.19 && < 5
, moonlight-planar:ffi
-- This component owns only cross-slice compile coherence. Behavioral ownership
-- remains in focused suites. The shared test-properties stanza keeps
-- every test body at @-O0@, so the union retains type/module/instance collision
-- detection without paying to optimize a second copy of every test body.
test-suite moonlight-planar-coherence-test
import:
triangulation-test-properties,
triangulation-test-support-slice,
triangulation-native-test-slice,
triangulation-serialization-test-slice,
triangulation-algebra-fixture-slice,
triangulation-algebra-law-slice,
triangulation-region-algebra-law-slice,
triangulation-valuation-law-slice,
triangulation-minkowski-law-slice,
triangulation-exact-clip-retention-law-slice,
triangulation-power-diagram-law-slice,
triangulation-layer-operations-law-slice,
triangulation-algebra-schedule-slice,
triangulation-parallel-test-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/coherence
test/native
test/serialization
test/algebra
test/parallel
test/support
-- ── benchmark slices ─────────────────────────────────────────────────────────
-- Deliberately not @tasty-bench@: these report allocated bytes and the work
-- counters the library keeps about itself — hierarchy walk steps, refinement
-- queue pops, bytes per interpolation query — and a wall-clock harness cannot
-- express any of them. The serialization benchmark below additionally compares
-- complete V6 bytes with the retained test-only gather oracle.
common triangulation-benchmark-properties
import: shared-properties
-- The allocation arms read GHC.Stats, which is dark without -T. As with the
-- test suites, @-with-rtsopts@ is CONCATENATED by GHC across repetitions, so
-- it must appear exactly once per benchmark: this stanza is that one place,
-- and no benchmark slice may name it again.
ghc-options: -threaded -rtsopts "-with-rtsopts=-T"
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
common triangulation-benchmark-support-slice
other-modules:
BenchMeasure
BenchSupport
build-depends: moonlight-planar:dcel-internal
, moonlight-planar:core
common triangulation-build-benchmark-slice
other-modules: Moonlight.Planar.BuildBench
build-depends:
primitive >= 0.9 && < 0.10
, moonlight-planar:dcel-internal
, moonlight-planar:build-internal
, moonlight-planar:storage-internal
, moonlight-planar:ffi
common triangulation-dcel-benchmark-slice
other-modules: Moonlight.Planar.DcelBench
build-depends: moonlight-planar:dcel-internal
, moonlight-planar:build
common triangulation-dual-benchmark-slice
other-modules: Moonlight.Planar.DualBench
build-depends: moonlight-planar:dual
, moonlight-planar:dcel-internal
, moonlight-planar:build
common triangulation-join-benchmark-slice
other-modules: Moonlight.Planar.JoinBench
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:build-internal
, moonlight-planar:storage-internal
, moonlight-algebra:join
common triangulation-region-benchmark-slice
other-modules: Moonlight.Planar.RegionBench
build-depends:
containers >= 0.8 && < 0.9
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar
, moonlight-planar:build
-- The package-owned external construction board deliberately uses tasty-bench:
-- unlike the native work-counter slices above, its only lawful common metric
-- across Haskell and four Rust referents is elapsed or CPU time. The Rust
-- crate is a foreign adapter; Moonlight owns the case algebra, agreement
-- descent, timing, receipt parser, and derived pictures here.
common triangulation-delaunay-compare-properties
import: shared-properties
ghc-options: -O2
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, moonlight-planar:build-internal
, moonlight-planar:dcel-internal
, moonlight-planar:core
executable moonlight-planar-delaunay-compare
import: triangulation-delaunay-compare-properties
ghc-options: -threaded -rtsopts
main-is: Main.hs
hs-source-dirs: docs/delaunay-compare
other-modules:
Moonlight.Planar.Bench.DelaunayCompare.Domain
Moonlight.Planar.Bench.DelaunayCompare.Native
Moonlight.Planar.Bench.DelaunayCompare.Suite
build-depends:
directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, process >= 1.6 && < 1.7
, tasty-bench >= 0.3 && < 0.6
, transformers >= 0.5 && < 0.7
, unix >= 2.8 && < 2.9
, vector >= 0.13 && < 0.14
executable moonlight-planar-delaunay-pictures
import: triangulation-delaunay-compare-properties
main-is: PictureMain.hs
hs-source-dirs: docs/delaunay-compare
other-modules:
Moonlight.Planar.Bench.DelaunayCompare.Domain
Moonlight.Planar.Bench.DelaunayCompare.Picture
build-depends:
containers >= 0.8 && < 0.9
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, transformers >= 0.5 && < 0.7
executable moonlight-planar-category-observatory-export
import: shared-properties
main-is: Main.hs
hs-source-dirs: docs/category-observatory
other-modules:
Moonlight.Planar.Exhibit.CategoryObservatory
Moonlight.Planar.Exhibit.CategoryObservatory.Category
Moonlight.Planar.Exhibit.CategoryObservatory.Geometry
Moonlight.Planar.Exhibit.CategoryObservatory.Identifier
Moonlight.Planar.Exhibit.CategoryObservatory.Model
Moonlight.Planar.Exhibit.CategoryObservatory.Nerve
Moonlight.Planar.Exhibit.CategoryObservatory.Picture
ghc-options: -Wall -Wcompat
default-extensions:
TypeFamilies
if impl(ghc < 9.14)
buildable: False
build-depends:
aeson >= 2.2 && < 2.4
, base >= 4.22 && < 5
, bytestring >= 0.12 && < 0.13
, containers >= 0.6 && < 0.9
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, moonlight-category >= 1.1.0.0 && < 1.2
, moonlight-category:simplicial >= 1.1.0.0 && < 1.2
, moonlight-homology:cell-category >= 0.1.0.2 && < 0.2
, moonlight-homology:cell-complex >= 0.1.0.2 && < 0.2
, moonlight-planar:build-internal
, moonlight-planar:cell-complex
, moonlight-planar:core
, moonlight-planar:dcel-internal
, transformers >= 0.5 && < 0.7
, vector >= 0.13 && < 0.14
executable moonlight-planar-noctilucent-garden
import: shared-properties
main-is: Main.hs
hs-source-dirs: docs/noctilucent-garden docs/art-common
other-modules: Moonlight.Planar.Exhibit.Svg
build-depends:
base >= 4.19 && < 5
, moonlight-planar:build
, moonlight-planar:dcel
, moonlight-planar:dual
, vector >= 0.13 && < 0.14
executable moonlight-planar-moonblade
import: shared-properties
main-is: Main.hs
hs-source-dirs: docs/moonblade docs/art-common
other-modules:
Moonlight.Planar.Exhibit.Svg
Moonlight.Planar.Exhibit.Moonblade.Crescent
Moonlight.Planar.Exhibit.Geometry
build-depends:
base >= 4.19 && < 5
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, moonlight-planar:build
, moonlight-planar:dcel
, vector >= 0.13 && < 0.14
executable moonlight-planar-knight-rig
import: shared-properties
main-is: Main.hs
hs-source-dirs: docs/knight-rig docs/art-common
other-modules: Moonlight.Planar.Exhibit.Geometry
build-depends:
base >= 4.19 && < 5
, moonlight-planar:build
, moonlight-planar:dcel
, vector >= 0.13 && < 0.14
executable moonlight-planar-persistence-rose
import: shared-properties
main-is: Main.hs
hs-source-dirs: docs/persistence-rose
other-modules:
Moonlight.Planar.Exhibit.PersistenceRose
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, bytestring >= 0.12 && < 0.13
, containers >= 0.6 && < 0.9
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, moonlight-homology >= 0.1.0.2 && < 0.2
, moonlight-planar
, moonlight-planar:cell-complex
, moonlight-planar:dcel-internal
, moonlight-planar:dual
, text >= 2.0 && < 2.2
, transformers >= 0.5 && < 0.7
, vector >= 0.13 && < 0.14
, moonlight-planar:build
-- These referent instruments inspect package-internal handles and thaw/freeze
-- lanes. They belong to the triangulation package rather than reopening its
-- private construction boundary through a second package.
executable moonlight-planar-spade-referent
default-language: GHC2024
ghc-options:
-Wall
-Wcompat
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wredundant-constraints
-Wpartial-fields
-O2
-rtsopts
default-extensions:
BangPatterns
LambdaCase
NumericUnderscores
hs-source-dirs: bench/spade-compare/hs
main-is: Main.hs
-- Main is the entry and the lane dispatch; every workload, gate and
-- diagnostic sits in the domain module that owns it. The domains depend on
-- SpadeCompare.Support and on nothing else of each other, so they compile in
-- parallel and a lane edit rebuilds one slice.
other-modules:
Moonlight.Planar.Bench.SpadeCompare.Lane
Moonlight.Planar.Bench.SpadeCompare.Input
Moonlight.Planar.Bench.SpadeCompare.Timing
Moonlight.Planar.Bench.SpadeCompare.Support
Moonlight.Planar.Bench.SpadeCompare.Delaunay
Moonlight.Planar.Bench.SpadeCompare.Removal
Moonlight.Planar.Bench.SpadeCompare.Hierarchy
Moonlight.Planar.Bench.SpadeCompare.Constraint
Moonlight.Planar.Bench.SpadeCompare.Interpolation
Moonlight.Planar.Bench.SpadeCompare.Voronoi
Moonlight.Planar.Bench.SpadeCompare.Dcel
Moonlight.Planar.Bench.SpadeCompare.Intersection
Moonlight.Planar.Bench.SpadeCompare.Gates
build-depends:
base >= 4.22 && < 5
, deepseq >= 1.4 && < 1.6
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.6
, vector >= 0.13 && < 0.14
, primitive >= 0.9 && < 0.10
, moonlight-planar
, moonlight-planar:build
, moonlight-planar:dcel-internal
, moonlight-planar:build-internal
, moonlight-planar:dual
-- The alpha comparison is deliberately opt-in: ordinary scorecard listing and
-- replay do not inherit Homology merely because this diagnostic exists beside
-- the canonical board.
executable moonlight-planar-alpha-spade-referent
default-language: GHC2024
ghc-options:
-Wall
-Wcompat
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wredundant-constraints
-Wpartial-fields
-O2
-rtsopts
default-extensions:
BangPatterns
LambdaCase
NumericUnderscores
hs-source-dirs:
bench/spade-compare/hs-alpha
bench/spade-compare/hs
main-is: Main.hs
other-modules:
Moonlight.Planar.Bench.SpadeCompare.Alpha
Moonlight.Planar.Bench.SpadeCompare.Input
Moonlight.Planar.Bench.SpadeCompare.Lane
Moonlight.Planar.Bench.SpadeCompare.Timing
build-depends:
base >= 4.22 && < 5
, containers >= 0.6 && < 0.9
, deepseq >= 1.4 && < 1.6
, vector >= 0.13 && < 0.14
, moonlight-homology >= 0.1 && < 0.2
, moonlight-planar:build-internal
, moonlight-planar:cell-complex
, moonlight-planar:core
, moonlight-planar:dcel-internal
, moonlight-planar:dual
-- Exact sign-only generator observations versus retained magnitude arithmetic.
test-suite moonlight-planar-lifted-sign-test
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
test/lifted-sign
src-public
other-modules:
Moonlight.Planar.LiftedSignCases
Moonlight.Planar.Internal.PowerDiagram.Generator
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, moonlight-planar:core
, moonlight-planar:dcel-internal
benchmark moonlight-planar-lifted-sign-bench
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/lifted-sign
test/lifted-sign
src-public
bench/support
other-modules:
Moonlight.Planar.LiftedSignCases
Moonlight.Planar.Internal.PowerDiagram.Generator
BenchMeasure
ghc-options: -fexpose-all-unfoldings -threaded -rtsopts "-with-rtsopts=-T"
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, tasty-bench >= 0.3 && < 0.6
, moonlight-planar:core
, moonlight-planar:dcel-internal
benchmark moonlight-planar-serialization-bench
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/serialization
bench/support
test/serialization
other-modules:
BenchMeasure
Moonlight.Planar.SerializationV6Oracle
Moonlight.Planar.SerializationFixtures
ghc-options: -threaded -rtsopts "-with-rtsopts=-T"
build-depends:
base >= 4.19 && < 5
, deepseq >= 1.5 && < 1.6
, vector >= 0.13 && < 0.14
, binary >= 0.8 && < 0.9
, bytestring >= 0.12 && < 0.13
, tasty-bench >= 0.3 && < 0.6
, moonlight-planar:core
, moonlight-planar:serialize
, moonlight-planar:build-internal
, moonlight-planar:dcel-internal
, moonlight-planar:storage-internal
-- One exact Delaunay alpha filtration versus independently restricting and
-- reducing the same chain complex at every critical radius. Construction of
-- the shared Delaunay geometry is outside all timed lanes.
benchmark moonlight-planar-alpha-bench
import:
shared-properties,
triangulation-benchmark-support-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/alpha
bench/support
ghc-options: -threaded -rtsopts "-with-rtsopts=-T"
if impl(ghc < 9.14)
buildable: False
build-depends:
base >= 4.22 && < 5
, containers >= 0.6 && < 0.9
, deepseq >= 1.5 && < 1.6
, moonlight-homology >= 0.1.0.2 && < 0.2
, moonlight-planar
, moonlight-planar:build-internal
, moonlight-planar:cell-complex
, moonlight-planar:dcel-internal
, vector >= 0.13 && < 0.14
-- Exact bounded power-cell construction. Tasty-bench owns the timing
-- distribution; the benchmark's one-shot report derives boundary/intersection and
-- rational-width receipts from the public power-diagram result.
benchmark moonlight-planar-power-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/power
bench/support
other-modules:
Moonlight.Planar.PowerBench
Moonlight.Planar.PowerMassBench
build-depends:
containers >= 0.6 && < 0.9
, tasty-bench >= 0.3 && < 0.6
, moonlight-planar
-- Exact affine-envelope construction, balanced n-ary refinement, and direct
-- cell analytics against the public compositions callers would otherwise
-- materialize by hand.
benchmark moonlight-planar-layer-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/layer
bench/support
other-modules:
Moonlight.Planar.LayerBench
build-depends:
containers >= 0.8 && < 0.9
, tasty-bench >= 0.3 && < 0.6
, moonlight-planar:core
, moonlight-planar
benchmark moonlight-planar-build-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-build-benchmark-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/build
bench/support
benchmark moonlight-planar-dcel-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-dcel-benchmark-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/dcel
bench/support
benchmark moonlight-planar-dual-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-dual-benchmark-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/dual
bench/support
benchmark moonlight-planar-join-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-join-benchmark-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/join
bench/support
benchmark moonlight-planar-publication-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-join-benchmark-slice
type: exitcode-stdio-1.0
main-is: PublicationMain.hs
hs-source-dirs:
bench/publication
bench/join
bench/support
benchmark moonlight-planar-region-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-region-benchmark-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/region
bench/support
benchmark moonlight-planar-curve-bench
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/curve
bench/support
other-modules:
BenchMeasure
Moonlight.Planar.CurveBench
Moonlight.Planar.AuthoringBench
ghc-options: -O2 -rtsopts "-with-rtsopts=-T"
build-depends:
base >= 4.19 && < 5
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, moonlight-planar:dcel
, moonlight-planar:illustration
-- Packed native finite-set kernels plus the opt-in canonical byte interpreter.
-- The measured core itself remains the dependency-light @hex@ component.
benchmark moonlight-planar-hex-bench
import: shared-properties
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/hex
bench/support
other-modules:
BenchMeasure
PlanarSelectionBaseline
PlanarSelectionBench
ghc-options: -O2 -threaded -rtsopts "-with-rtsopts=-T"
build-depends:
base >= 4.19 && < 5
, bytestring >= 0.12 && < 0.13
, containers >= 0.8 && < 0.9
, deepseq >= 1.5 && < 1.6
, tasty-bench >= 0.4 && < 0.5
, moonlight-planar
, moonlight-planar:hex
, moonlight-planar:hex-serialize
benchmark moonlight-planar-bench
import:
triangulation-benchmark-properties,
triangulation-benchmark-support-slice,
triangulation-build-benchmark-slice,
triangulation-dcel-benchmark-slice,
triangulation-dual-benchmark-slice,
triangulation-join-benchmark-slice,
triangulation-region-benchmark-slice
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs:
bench/aggregate
bench/build
bench/dcel
bench/dual
bench/join
bench/region
bench/support