Type} (XList: Type → Type) := { xlBoolFunRec :> boolFunRec_gen XBool; xlMaybeFunRec :> @maybeFunRec_gen XBool XMaybe; xlIntFunRec :> @intFunRec_gen XBool XInteger; xListNil: ∀ {A: Type}, XList A; xListPut: ∀ {X}, X → XList X; xListCons: ∀ {X}, X → XList X → XList X; xListIsNil: ∀ {A: Type}, XList A → XBool; xListIn: ∀ {A: Type}, (A → A → XBool) → A → XList A → XBool; xListOptionIn: ∀ {A: Type}, (A → A → XBool) → XMaybe A → XList A → XBool; xListFoldLeft: ∀ {A B : Type}, (A → B → A) → XList B → A → A; xListApp: ∀ {A : Type}, XList A → XList A → XList A; xListMap: ∀ {A B : Type}, (A → B) → XList A → XList B; xListFilter: ∀ {A : Type}, (A → XBool) → XList A → XList A; xListHead : ∀ {A : Type}, XList A → XMaybe A; xListLength : ∀ {A : Type}, XList A → XInteger }. Instance listFunRec : listFunRec_gen HList := {| xListNil := @hListNil; xListPut := @hListPut; xListCons := @hListCons; xListIsNil := @hListIsNil; xListIn := @hListIn; xListOptionIn := @hListOptionIn; xListFoldLeft := @hListFoldLeft; xListApp := @hListApp; xListMap := @hListMap; xListFilter := @hListFilter; xListHead := @hListHead; xListLength := @hListLength |}.