[Agda] Typeclasses again in release-candidate/master

David Darais darais at cs.umd.edu
Sat Feb 20 19:30:30 CET 2016


I tested this idea and it fails to convince Agda to resolve the instance.

I have a large codebase with instances like this, so if you have any more ideas
please let me know.

Thanks,
David

> open import Agda.Primitive
> 
> data _≡_ {ℓ} {A : Set ℓ} (x : A) : A → Set ℓ where
>   refl : x ≡ x
> 
> {-# BUILTIN EQUALITY _≡_ #-}
> {-# BUILTIN REFL refl #-}
> 
> record Order {ℓ} ℓ' (A : Set ℓ) : Set (ℓ ⊔ lsuc ℓ') where
>   field
>     _≤_ : A → A → Set ℓ'
> open Order {{...}} public
> 
> data ℕ : Set where
>   Zero : ℕ
>   Succ : ℕ → ℕ
> 
> data _≤ⁿ_ : ℕ → ℕ → Set where
>   Zero : ∀ {n} → Zero ≤ⁿ n
>   Succ : ∀ {n₁ n₂} → n₁ ≤ⁿ n₂ → Succ n₁ ≤ⁿ Succ n₂
> 
> instance
>   Order[ℕ] : ∀ {ℓ} {{E : ℓ ≡ lzero}} → Order ℓ ℕ
>   Order[ℕ] {{refl}} = record { _≤_ = _≤ⁿ_ }
> 
> subtract : ∀ (n₁ n₂ : ℕ) → n₂ ≤ n₁ → ℕ
> subtract n₁ n₂ P = {!!}

> On Feb 20, 2016, at 11:55 AM, Andrea Vezzosi <sanzhiyan at gmail.com> wrote:
> 
> In Haskell you would hack this sort of thing with an equality
> constraint, so that the instance matches any level, including metas,
> but then the constraint solver sets the level to lzero:
> 
> instance (l ~ lzero) => Order l ℕ where { ... }
> 
> 
> 
> 
> 
> 
> 
> On Sat, Feb 20, 2016 at 9:05 AM, Ulf Norell <ulf.norell at gmail.com> wrote:
>> Yes that might be something to consider.
>> 
>> / Ulf
>> 
>> On Sat, Feb 20, 2016 at 8:33 AM, effectfully <effectfully at gmail.com> wrote:
>>> 
>>> Ulf Norell, would it make sense to give a special treatment for level
>>> metas wrt instance search? Records are very often parameterized by
>>> levels and it doesn't feel good to choose between universe
>>> polymorphism and instance search.
>> 
>> 
>> 
>> _______________________________________________
>> Agda mailing list
>> Agda at lists.chalmers.se
>> https://lists.chalmers.se/mailman/listinfo/agda
>> 



More information about the Agda mailing list