Каково намерение Idris'BorrowedType`?
В идрисе есть вселенная под названием UniqueType
значения типов, в которых можно использовать только один раз. Насколько я знаю, его можно использовать для написания высокопроизводительного кода. Но тот факт, что значение может использоваться только один раз, обычно слишком ограничен, поэтому есть способ заимствовать значение вместо его потребления:
data Borrowed : UniqueType -> BorrowedType where ...
Borrowed
тип данных определяется как указано выше в Idris. Почему он просто не возвращается Type
но представьте другую вселенную типов (BorrowedType
)?
1 ответ
Как объясняется в документации, существуют ограничения на BorrowedType
-typed Borrowed
ценности:
В отличие от уникальной стоимости, заемная стоимость может указываться столько раз, сколько необходимо. Тем не менее, существует ограничение на использование заемных средств. В конце концов, очень похоже на библиотечную книгу или газонокосилку вашего соседа: если функция заимствует значение, она должна возвращать ее именно в том состоянии, в котором она была получена!
Ограничение в том, что когда
Borrowed
тип совпадает, любые переменные шаблона подRead
которые имеют уникальный тип, могут вообще не упоминаться в правой части (если они сами не предназначены для другой функции).
Это ограничение (и lend
снисходительность) реализуется по специальным правилам набора текста в проверке типов. К этим правилам нужно что-то применять, поэтому BorrowedType
должен быть отдельным видом, чем обычный Type
(для которых нет специальных lend
/Read
правила набора текста).