write some ideas for the type system

This commit is contained in:
Schrottkatze 2024-01-08 13:43:44 +01:00
parent 8ddd1748b8
commit 5b55dd30ab

View file

@ -3,7 +3,7 @@
doc
)
= Type data model
= Type system
== Requirements
@ -14,3 +14,30 @@
- custom types (structs/enums)
- algebraic enums
- traits (`Numeric`...)
- functions as data
== Ideas
=== Generic-focused
Color-awareness may be handled as seperate types, so one might have `LinearRgb`, `SRgb`, `Xyz` etc. Optimally implemented using our own constructs.
An image in sRGB might have the following type signature: `Image<SRgb>`. Colors could also have a trait which could implement conversions.
=== Group inference
==== Example: Multiplying an image with 0.5
The syntax should be the same as just multiplying two numbers, just that one of the values is an image.
Type signatures of the values in a generic system:
`Image<SRgb<u8>> * f32`
Desugared that would look like this:
`[[(u8, u8, u8)]] * f32 -> [[(u8, u8, u8)]]`
Since all of the values are numbers (-> implementing `Num`/`Number`), they should be able to implicitely multiplied.
Since an image has additional data, how should that be handled? should the resolution be static array lengths?