diff --git a/docs/design/types.typ b/docs/design/types.typ index 2e4af6e..198bdd7 100644 --- a/docs/design/types.typ +++ b/docs/design/types.typ @@ -3,8 +3,41 @@ doc ) -= meow nya += Type system -nyanyanya +== Requirements -#lorem(50) +- Color-aware + - It can handle colors and colorspaces for images + - ocio???? +- number/number type support +- 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`. 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> * 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?