伊德里斯'背后的意图是什么? `BorrowedType`?

时间:2016-10-02 17:33:10

标签: idris linear-types uniqueness-typing

在idris中,有一个名为UniqueType的宇宙,其类型的值只能使用一次。据我所知,它可以用来编写高性能代码。 但是,一个值只能使用一次的事实通常太有限,因此可以借用值而不是消耗它:

data Borrowed : UniqueType -> BorrowedType where ...

Borrowed数据类型在Idris中定义如上。为什么它不会简单地返回Type,而是引入另一类型(BorrowedType)?

1 个答案:

答案 0 :(得分:4)

As the documentation explains,对BorrowedType - 类型Borrowed值有限制:

  

与唯一值不同,借用值可以根据需要多次引用。但是,对借用价值的使用方式存在限制。毕竟,就像图书馆书籍或你邻居的割草机一样,如果一个函数借用了一个值,它就会在收到它的条件下返回它!

     

限制是当匹配Borrowed类型时,Read下具有唯一类型的任何模式变量可能根本不会在右侧引用(除非它们本身借给了另一个功能)。

此限制(以及lend的宽大处理)是通过类型检查器中的特殊键入规则实现的。这些规则需要适用的内容,这就是BorrowedType必须与常规Type分开的原因{为此lend / Read打字规则)。