實例參數機制在舊的paper和at the Agda wiki中描述。有沒有一些值得注意的事實,這些來源沒有提到?實例搜索有什麼限制?實例搜索限制
實例搜索限制
回答
刪除歧義
如果我們進行類型檢查這一點:
open import Category.Functor
open import Category.Monad
open RawFunctor
open RawMonad
和運行C-c C-w _<$>_
(C-c C-w
是 「解釋了爲什麼在範圍上具有特定名稱」),我們得到(一些清潔後)
_<$>_ is in scope as
* a record field Category.Functor.RawFunctor._<$>_
* a record field Category.Monad.RawMonad._._<$>_
iee _<$>_
是不明確的,因此在同一個模塊中使用monads和函子是非常麻煩的,因爲您必須在兩個_<$>_
之間手動區分歧義。
這可以通過實例參數來解決。相反,在Monad
定義打開Functor
(通過Applicatve
)的:
record RawIMonad ... where
open RawIApplicative rawIApplicative public
,我們可以提供一個實例,讓實例搜索做的工作(的Applicative
和Functor
的定義可以發現here):
record Monad {α} (M : Set α -> Set α) : Set (suc α) where
infixl 1 _>>=_
field
return : ∀ {A} -> A -> M A
_>>=_ : ∀ {A B} -> M A -> (A -> M B) -> M B
instance
Monad<:Applicative : Applicative M
Monad<:Applicative = record { pure = return ; _<*>_ = λ mf mx -> mf >>= λ f -> mx >>= return ∘ f }
open Monad {{...}}
現在只有一個_<$>_
- 在Functor
的定義中,但實例搜索看到,monad是應用程序,應用程序是函子,因此定義了_<$>_
在monads上,因爲它是在仿函數上定義的。
實例字段
此刻的你can't申報記錄領域的實例:
record R : Set where
field
instance n : ℕ
的解決方法是
record R : Set where
field
n : ℕ
instance
R->ℕ : ℕ
R->ℕ = n
弱點
實例搜索不配合與metavariables決議。
instance
fz : Fin 1
fz = zero
z : ∀ {n} {{_ : Fin n}} -> ℕ
z = 0
yellow : z ≡ 0
yellow = refl
ok : z {1} ≡ 0
ok = refl
在yellow
例如搜索沒有找到fz
實例。我was told,這是預期的行爲,但它看起來對我太嚴格,我沒有看到任何好處。
一個解決辦法是到位的隱含參數使用實例參數:
instance
one : ℕ
one = 1
fz : Fin 1
fz = zero
z : ∀ {{n}} {{_ : Fin n}} -> ℕ
z = 0
now-ok : z ≡ 0
now-ok = refl
Instances are always imported
module M where
instance
z : ℕ
z = 0
z' : {{n : ℕ}} -> ℕ
z' {{n}} = n
ok : z' ≡ 0
ok = refl
的M
模塊沒有打開,但實例是在範圍內。如果你想隱藏的情況下,使用記錄:
record R : Set where
instance
z : ℕ
z = 0
z' : {{n : ℕ}} -> ℕ
z' {{n}} = n
error : z' ≡ 0
error = refl
open R _
ok : z' ≡ 0
ok = refl
A nasty bug
我們可以重寫ok
爲
ok : let open R _ in z' ≡ 0
ok = refl
但如果從R
定義ok'
下面
ok' : z' ≡ 0
ok' = refl
實例不在範圍內,b無論如何,Agda都會選擇它。價值水平也是如此。即如果您導入模塊或打開記錄,則無論您打開哪個模塊,都可以使用下面的所有定義。
個人經歷
我是用實例論證戰鬥了兩個星期左右的時間,努力implement在阿格達一些基本範疇的理論,但例如搜索是不可預測的,因爲它的弱點 - 添加參數達到創紀錄的廢墟一切。也很難弄清楚爲什麼一切都是黃色的 - 是因爲你在做一些愚蠢的事情,還是因爲Agda拒絕解決一個微不足道的變量?如果您在六行和多個嵌套記錄上有類型簽名,則無論您是否找到解決實例搜索限制的方法,都是一個運氣問題。
- 1. 限制搜索(python)
- 2. AdMob實例限制
- 3. 索引超出二進制搜索的界限例外
- 4. Azure實例限制和大小限制
- 5. Resharper - 搜索類型實例
- 6. 方法:搜索類實例
- 7. Dailymotion API的搜索限制
- 8. unboundId LDAP限制搜索
- 9. Google搜索ajax api限制?
- 10. Google搜索結果限制
- 11. INFORMATION_SCHEMA.COLUMNS限制搜索到表
- 12. Hibernate搜索限制結果
- 13. str_replace()有搜索限制嗎?
- 14. 如何限制搜索和
- 15. SOLR - 限制搜索結果
- 16. jquery datatables textarea搜索限制
- 17. 限制在搜索查看
- 18. 解釋真實性索引和文檔搜索限制
- 19. 限制JMS目標實例
- 20. Pygame - 精靈限制實例
- 21. Bluemix服務實例限制
- 22. Cloudant搜索索引查詢限制
- 23. 限制刪除GCE實例權限
- 24. 實現二進制搜索
- 25. 實現二進制搜索
- 26. Twitter搜索API中的速率限制例外
- 27. 爲Windows索引搜索設置限制/ maxRecords屬性通過PHP搜索搜索
- 28. Select2 4.x:如何實際限制搜索輸入?
- 29. 二進制搜索上限爲實數函數
- 30. 如何限制Bing搜索API V5搜索網站