Zulip Chat Archive
Stream: new members
Topic: Coercion on type class
Alexander Niederbühl (Oct 20 2023 at 13:37):
I have defined the following type class:
class ToFloat (α : Type u) where
  toFloat : α → Float
I did expect this to work:
instance [ToFloat α]: Coe α Float where
  coe x := ToFloat.toFloat x
But I'm getting
cannot find synthesization order for instance @instCoeFloat with type
{α : Type u_1} → [inst : ToFloat α] → Coe α Float
all remaining arguments have metavariables:
ToFloat ?α
What does this mean, is it not possible?
Alex J. Best (Oct 20 2023 at 14:11):
This is as Coe has the first argument (alpha), as a semi-out param (meaning that Lean will go looking for instances even if alpha is not yet known when inserting Coes). You probably should use CoeHead in place of Coe
Alexander Niederbühl (Oct 21 2023 at 13:57):
Great, that works. Thanks you!
Last updated: May 02 2025 at 03:31 UTC