Каково намерение Idris'BorrowedType`?

В идрисе есть вселенная под названием UniqueType значения типов, в которых можно использовать только один раз. Насколько я знаю, его можно использовать для написания высокопроизводительного кода. Но тот факт, что значение может использоваться только один раз, обычно слишком ограничен, поэтому есть способ заимствовать значение вместо его потребления:

data Borrowed : UniqueType -> BorrowedType where ...

Borrowed тип данных определяется как указано выше в Idris. Почему он просто не возвращается Type но представьте другую вселенную типов (BorrowedType)?

1 ответ

Решение

Как объясняется в документации, существуют ограничения на BorrowedType-typed Borrowed ценности:

В отличие от уникальной стоимости, заемная стоимость может указываться столько раз, сколько необходимо. Тем не менее, существует ограничение на использование заемных средств. В конце концов, очень похоже на библиотечную книгу или газонокосилку вашего соседа: если функция заимствует значение, она должна возвращать ее именно в том состоянии, в котором она была получена!

Ограничение в том, что когда Borrowed тип совпадает, любые переменные шаблона под Read которые имеют уникальный тип, могут вообще не упоминаться в правой части (если они сами не предназначены для другой функции).

Это ограничение (и lendснисходительность) реализуется по специальным правилам набора текста в проверке типов. К этим правилам нужно что-то применять, поэтому BorrowedType должен быть отдельным видом, чем обычный Type (для которых нет специальных lend/Read правила набора текста).

Другие вопросы по тегам