structure constantFunction (α β : Type) := (f : α → β) (h : ∀ a₁ a₂, f a₁ = f a₂) instance {α β : Type} : HasCoeToFun (constantFunction α β) := ⟨_, constantFunction.f⟩ def myFun {α : Type} : constantFunction α (Option α) := { f := fun a => none, h := fun a₁ a₂ => rfl } def myFun' (α : Type) : constantFunction α (Option α) := { f := fun a => none, h := fun a₁ a₂ => rfl } #check myFun 3 #check @myFun Nat 3 -- works #check myFun' _ 3 #check myFun' Nat 3 -- works #check ⇑myFun 3 #check ⇑(myFun' _) 3 #check ⇑(myFun' Nat) 3