0
以下阿格達代碼是非法的:在使用其中導入綁定與
record F : Set where
field
A : Set
a : (F : Set) → Set
a f with A
a f | x = x
where open F f
它是示出了用在where
引入綁定可能是在with
子句有用的人工例子。儘管是人爲的,但有一些更大的例子可能是可取的。
看來,爲什麼這是非法的原因是,with
可能會導致參數由於統一而被更大的項取代。特別是早期的綁定可能在匹配with
結果的子句中變得不可用。這是一個適用於任何解決方案的警告。
假設傳遞給with
的表達式實際上足夠長以證明這種努力,是否有辦法模仿或緩解這種特性?
當然,這裏的缺點是,必須重新開放每個'with'(例如'a f with ... | ... | ...')。任何方式來改善這個用例? – 2014-10-21 09:32:28
@Helmut,我編輯了答案。 – user3237465 2014-10-21 12:17:49
你的第二個版本超出了我的想象,但它確實提高了在罕見情況下的可讀性。 – 2014-10-22 08:29:30