Когда я предпочитаю создавать типы данных, а не вычислять типы?
Конкретный пример - дано:
data Zero : Set where
record One : Set where
data Nat : Set where
zero : Nat
suc : Nat -> Nat
и желание определить \ lt, каковы преимущества и недостатки каждого из это:
-- a new datatype
data _<_ : Nat -> Nat -> Set where
ozero : {n : Nat} -> zero < suc n
osuc : {n m : Nat} -> n < m -> suc n < suc m
против
-- calculating
_<_ : Nat -> Nat -> Set
zero < zero = Zero
zero < suc m = One
suc n < zero = Zero
suc n < suc m = n < m
Пока у меня есть эти:
- Я помню / видел, что второй делает это Агде труднее иногда выводить неявные аргументы (?)
- первый должен использовать больше памяти (?)
- второй тип данных более полезен, когда вы хотите, чтобы агда могла выводить ваши менее чем доказательство в качестве неявного аргумента, например, когда ваши аргументы являются константами / выводимыми