私が関数を持っていると仮定します (それは実際に名前が言うことを行います):
filter : ∀ {A n} → (A → Bool) → Vec A n → ∃ (λ m → Vec A m)
ここで、返された従属ペアをどうにかして処理したいと思います。私は簡単なhead
関数を書きました:
head :: ∀ {A} → ∃ (λ n → Vec A n) → Maybe A
head (zero , _ ) = nothing
head (succ _ , (x :: _)) = just x
もちろん、これは完全に機能します。しかし、それは私が疑問に思いました:関数がでのみ呼び出される可能性があることを確認できる方法はありますn ≥ 1
か?
理想的には、私は関数を作りたいhead : ∀ {A} → ∃ (λ n → Vec A n) → IsTrue (n ≥ succ zero) → A
です; n
で使用すると範囲外になるため、失敗しますIsTrue
。
御時間ありがとうございます!
IsTrue
次のようなものです:
data IsTrue : Bool → Set where
check : IsTrue true