在idris中,有一个名为UniqueType
的宇宙,其类型的值只能使用一次。据我所知,它可以用来编写高性能代码。
但是,一个值只能使用一次的事实通常太有限,因此可以借用值而不是消耗它:
data Borrowed : UniqueType -> BorrowedType where ...
Borrowed
数据类型在Idris中定义如上。为什么它不会简单地返回Type
,而是引入另一类型(BorrowedType
)?
答案 0 :(得分:4)
As the documentation explains,对BorrowedType
- 类型Borrowed
值有限制:
与唯一值不同,借用值可以根据需要多次引用。但是,对借用价值的使用方式存在限制。毕竟,就像图书馆书籍或你邻居的割草机一样,如果一个函数借用了一个值,它就会在收到它的条件下返回它!
限制是当匹配
Borrowed
类型时,Read
下具有唯一类型的任何模式变量可能根本不会在右侧引用(除非它们本身借给了另一个功能)。
此限制(以及lend
的宽大处理)是通过类型检查器中的特殊键入规则实现的。这些规则需要适用的内容,这就是BorrowedType
必须与常规Type
分开的原因{为此lend
/ Read
打字规则)。