我正在阅读使用Idris的类型驱动开发,其中一个练习要求读者定义一个类型TupleVect,这样一个向量可以表示为:
TupleVect 2 ty = (ty, (ty, ()))
Run Code Online (Sandbox Code Playgroud)
我通过定义以下类型解决了它:
TupleVect : Nat -> Type -> Type
TupleVect Z ty = ()
TupleVect (S k) ty = (ty, TupleVect k ty)
Run Code Online (Sandbox Code Playgroud)
以下测试类型检查:
test : TupleVect 4 Nat
test = (1,2,3,4,())
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么(1,2,3,4,()) == (1,(2,(3,(4,()))))?我原以为右手边是一个2元组,由一个Int和另一个元组组成.
查看http://docs.idris-lang.org/en/latest/tutorial/typesfuns.html#tuples上的文档,您可以看到元组表示为嵌套对.
因此(x, y, z) == (x, (y, z))对于每一个x,y,z
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |