簡體   English   中英

Agda級別錯誤消息的含義:…:.Agda.Primitive.Level

[英]Meaning of Agda level error message: … : .Agda.Primitive.Level

我試圖破譯有關級別的錯誤消息。 在Haskell中,我可以用簡單的方式編寫以下stream函數,twist:

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中定義類似函數時,我收到一條關於我不理解的級別的錯誤消息。 具體來說,我收到此錯誤消息:

_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代碼:

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')  }

歡迎來到Stack Overflow! 這種錯誤表示未解決的元變量,這意味着Agda未能推斷出隱式參數。 錯誤消息指示元變量(自動生成)名稱及其類型。 在這種情況下,問題可能與類型{a, b, c} twist :尚不清楚它們應位於哪個級別。 要解決此問題,請指定級別: {abc : Set}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM