Refactor type inference for collections

The type inference for collections (tuples, vectors, matrices, and
records) has been significantly refactored.

This includes:
- Introducing distinct `StaticType` variants for `Tuple`, `Vector`, and
  `Matrix`.
- Implementing more robust type checking for these collections, allowing
  for homogeneous and heterogeneous structures.
- Enhancing the `is_assignable_from` method to handle type compatibility
  between these collection types.
- Updating `Value::static_type()` to correctly infer the types of
  literal collections.
- Improving the type inference for map literals to create `Record`
  types.
- Adding comprehensive unit tests for tuple, vector, matrix, and record
  type inference.
This commit is contained in:
Michael Schimmel
2026-02-20 10:19:29 +01:00
parent 494bf554d2
commit 4f849ebd34
12 changed files with 225 additions and 50 deletions
+19
View File
@@ -0,0 +1,19 @@
;; Benchmark: 1.9us
;; Demonstration of N-dimensional Tuples, Vectors, and Matrices
;; Based on docs/Tupel 1.md
;;
;; This test verifies that the literals are correctly parsed and represented.
;; Type inference is verified via internal compiler unit tests.
;;
;; Output: [[1 3.14 "text"] [10 20 30 40] [[1 2] [3 4]] [[[1 2] [3 4]] [[5 6] [7 8]]] [[1 2] [3 4 5]] {:x 1, :y 0.3}]
(do
(def tpl [1, 3.14, "text"])
(def v [10 20 30 40])
(def mat2d [[1 2], [3 4]])
(def mat3d [[[1 2] [3 4]] [[5 6] [7 8]]])
(def mixed [[1 2] [3 4 5]])
(def rec {:x 1, :y 0.3})
[tpl v mat2d mat3d mixed rec]
)