diff --git a/misc_docs/syntax/language_type_parameter.mdx b/misc_docs/syntax/language_type_parameter.mdx new file mode 100644 index 000000000..a10f66f79 --- /dev/null +++ b/misc_docs/syntax/language_type_parameter.mdx @@ -0,0 +1,56 @@ +--- +id: "type-parameter" +keywords: ["type", "parameter", "generics", "placeholder"] +name: "'a" +summary: "This is a `type parameter`." +category: "languageconstructs" +--- + +Types may be declared with [type parameters](/docs/manual/latest/type#type-parameter-aka-generic) (also known as _generics_ in other languages) to create generalized versions of those types. + +### Example with one type parameter + + + +```res +type point2D<'a> = ('a, 'a) + +let intPoint: point2D = (1, 2) +let floatPoint: point2D = (1.0, 2.0) +``` + +```js +var intPoint = [1, 2]; +var floatPoint = [1.0, 2.0]; +``` + + + +### Example with multiple type parameters + + + +```res +type either<'a, 'b> = This('a) | That('b) + +let value1: either = This(123) +let value2: either = That("Hello") +``` + +```js +var value1 = { + TAG: /* This */ 0, + _0: 123, +}; + +var value2 = { + TAG: /* That */ 1, + _0: "Hello", +}; +``` + + + +### References + +- [Type parameters](/docs/manual/latest/type#type-parameter-aka-generic)