首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Agda级错误消息的含义:.:.Agda.Primitive.Level

Agda级错误消息的含义:.:.Agda.Primitive.Level
EN

Stack Overflow用户
提问于 2019-03-16 14:54:33
回答 1查看 187关注 0票数 1

我试着破译一条关于等级的错误信息。在Haskell中,我可以以一种简单的方式编写以下流函数twist:

代码语言:javascript
复制
data Stream a = a :> Stream a
twist :: (a -> (b , (Either a c))) -> (c -> (b , (Either a c))) -> (Either a c) -> Stream b
twist lt rt (Left a) = b :> twist lt rt ac
   where
     (b , ac) = lt a
twist lt rt (Right c) = b :> twist lt rt ac
   where
     (b , ac) = rt c

到现在为止还好。现在,当我试图在Agda中定义类似的函数时,我得到了一个关于我不理解的级别的错误消息。具体来说,我得到了以下错误消息:

代码语言:javascript
复制
_a_41 : .Agda.Primitive.Level  [ at ...snip.../MinimalStream.agda:20,34-35 ]
_b_42 : .Agda.Primitive.Level  [ at ...snip.../MinimalStream.agda:20,34-35 ]

它似乎在抱怨扭曲类型声明中类型变量a和b的级别,但我不确定我是否理解问题所在。任何人能提供的任何指示或解释都将不胜感激!

谢谢,比尔

下面是Agda代码,它生成瘦的整体:

代码语言:javascript
复制
module MinimalStream where

open import Data.Product using (_×_; _,_; proj₁)
open import Data.Sum -- using (_⊎_)

case_of_ : ∀ {a b} {A : Set a} {B : Set b} → A → (A → B) → B
case x of f = f x

record Stream A : Set where
  coinductive
  field headStr : A
        tailStr : Stream A
open Stream; S = Stream

-- standard kinds of stream functions work as expected.
unzip₁ : ∀ {a b : Set} → Stream (a × b) → Stream a
headStr (unzip₁ sab) = proj₁ (headStr sab)
tailStr (unzip₁ sab) = unzip₁ (tailStr sab)

twist : ∀ {a b c} → (a → (b × (a ⊎ c))) → (c → (b × (a ⊎ c))) → (a ⊎ c) → Stream b
headStr (twist lt rt (inj₁ a)) = case lt a of
                                    λ { (b , (inj₁ _)) → b ;
                                        (b , (inj₂ _)) → b }
headStr (twist lt rt (inj₂ c)) = case rt c of
                                    λ { (b , (inj₁ _)) → b ;
                                        (b , (inj₂ _)) → b }
tailStr (twist lt rt (inj₁ a)) = case lt a of
                                    λ { (_ , (inj₁ a')) → twist lt rt (inj₁ a') ;
                                        (_ , (inj₂ c))  → twist lt rt (inj₂ c)  }
tailStr (twist lt rt (inj₂ c)) = case rt c of
                                    λ { (_ , (inj₁ a))  → twist lt rt (inj₁ a) ;
                                        (_ , (inj₂ c')) → twist lt rt (inj₂ c')  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-16 23:24:12

欢迎来到堆栈溢出!这种错误表示未解决的元数据,这意味着Agda未能推断出隐含的参数。错误消息指示元数据的(自动生成)名称及其类型。在这种情况下,问题可能与{a, b, c}twist中的类型有关:不清楚这些类型应该在哪个级别。要解决这个问题,请指定级别:{a b c : Set}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55198089

复制
相关文章

相似问题

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