,"A type can either be unique (`*`), not unique (not annotated), possibly unique (`.`) or relatively unique (identifier and `| [...<=...]`)."
,"\n\nNote that when using unique types in a function or an ADT the container must also be unique."
,"For instance, `T = T (Int, *File)` has to be `T = T *(Int, *File)`."
,"\n\nFunctions have to be split up into arity 1 and the sub functions need to be annotated as well."
,"For instance, `T = T (Int *Int -> *Int)` has to be `T = T (Int -> *(*Int -> *Int))`."
]
,syntax_description="Annotates a type with its uniqueness. A type can either be unique (`*`), not unique (not annotated), possibly unique (`.`) or relatively unique (identifier and `| [..]`). Note that when using unique types in a function or an ADT the container must also be unique. e.g. `T = T (Int, *File)` has to be `T = T *(Int, *File)`. Functions have to be split up into arity 1 and the sub functions need to be annotated as well. e.g. `T = T (Int *Int -> *Int)` has to be `T = T (Int -> *(*Int -> *Int))`."
,syntax_doc_locations=[CLR11"9.1""_Toc311798093"]
,syntax_examples=mapEX
["Start :: *World -> *World //World is unique"
,"f :: .a -> .a //f works on unique and non-unique values"
,"f :: v:a u:b -> u:b | [v<=u] //f works when a is less unique than b"
["Start :: *World -> *World //World is unique"
,"f :: .a -> .a //f works on unique and non-unique values"
,"f :: v:a u:b -> u:b | [v<=u] //f works when a is less unique than b"