3
恢復型
比方說,我有一個數據類型:在伊德里斯
data Term : Type -> Type where
Id : Term (a -> a)
...
App : Term (a -> b) -> Term a -> Term b
有了一個證明事情是App
:
data So : Bool -> Type where
Oh : So True
isApp : Term a -> Bool
isApp (App x y) = True
isApp x = False
是否有可能編寫獲得的第一個參數的函數App
?我不知道我怎麼會鍵入它,因爲原來的參數類型丟失:
getFn : (x : Term b) -> So (isApp x) -> ???
getFn (App f v) p = f
我能保持Term
以及指示什麼類型的已應用到它裏面的標籤,但後來我不得不將自己限制爲可標記類型。以前我會認爲這是唯一的選擇,但在我認爲我會先問的依賴類型的土地上似乎會發生這麼多神奇的事情。
(阿格達例子是值得歡迎的好,雖然我更喜歡那些伊德里斯!)
它幾乎完全相同。您可以使用與Agda相同的方式將含義帶入範圍: GetFn(App {a} {b} f x)= Term(a - > b) –