首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使依赖参数在函数定义中可用

使依赖参数在函数定义中可用
EN

Stack Overflow用户
提问于 2021-03-13 09:07:12
回答 1查看 36关注 0票数 0

我为Vect提供了以下包装器

代码语言:javascript
复制
data Foo : (r : Nat) -> (t: Type) -> Type where
  MkFoo : Vect r t -> Foo r t

我想为Foo实现Functor,并在实现中使用r的值,但我无法对其进行编译。

代码语言:javascript
复制
Functor (Foo r) where
  map f (MkFoo v) = MkFoo (ff v) where
    ff : {r' : Nat} -> Vect r' a -> Vect r' b

给出

代码语言:javascript
复制
Error: While processing right hand side of map. r is not accessible in this
context.

Foo.idr:61:28--61:32
    |
 61 |   map f (MkFoo v) = MkFoo (ff v) where
    |                            ^^^^

这在IDRIS1中有效,但我不知道如何将其移植到Idris2。我试过让r不被擦除,用

代码语言:javascript
复制
Functor ({r : _} -> Foo r) where
  map f (MkFoo v) = MkFoo (ff v) where
    ff : {r' : Nat} -> Vect r' a -> Vect r' b

但我得到了

代码语言:javascript
复制
Error: While processing type
of Functor implementation at Foo.idr:60:1--62:46. When
unifying Type -> Type and Type.
Mismatch between: Type -> Type and Type.

Foo.idr:60:21--60:26
    |
 60 | Functor ({r : _} -> Foo r) where
    |                     ^^^^^
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 10:03:56

尝试:

代码语言:javascript
复制
{r : _} -> Functor (Foo r) where
  map f (MkFoo v) = MkFoo (ff v) where
    ff : {r' : Nat} -> Vect r' a -> Vect r' b
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66609163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档