В следующей программе Agda я получаю предупреждение о пропущенном регистре в определении one
, несмотря на то, что myList
соответствует только регистру cons
.
open import Data.Nat
data List (A : Set) : Set where
nil : List A
cons : A → List A → List A
myList : List ℕ
myList = cons 1 (cons 2 (cons 3 nil))
one : ℕ
one with myList
... | (cons x xs) = x
Incomplete pattern matching for .test.with-16. Missing
cases:
one | nil
Я знаю, что это звучит немного запутанно, но есть ли способ определить one
в терминах myList
, не сталкиваясь с ошибками "неполного сопоставления с образцом"?
Этот пример является упрощением моей первоначальной задачи, которая основана на домашнем задании и использует несколько более сложные типы. В этом случае "myList"
- это большое значение, вычисляемое умной функцией из небольшого ввода. Если я вычислю нормальную форму "myList"
с помощью Emacs 'Agda Mode (C-c C-n), я смогу извлечь из нее значение "one"
и вставить его в свою программу. Однако это значение занимает несколько десятков строк при распечатке, поэтому я бродил, если есть способ напрямую определить "one"
в терминах "myList"
, не сталкиваясь с неполной ошибкой сопоставления с образцом.