У меня есть структура данных
record IdentityPreservingMorphism domain codomain where
constructor MkMorphismOfMonoids
func : domain -> codomain
funcRespId : (Monoid domain, Monoid codomain) => func (Algebra.neutral) = Algebra.neutral
, которая просто говорит, что IdentityPreservingMorphism
- это морфизм между моноидами, который должен уважать идентичность.
Я пытаюсь доказать, чтоморфизмы идентичности - IdentityPreservingMorphism
monoidIdentity : Monoid m => MorphismOfMonoids m m
monoidIdentity = MkMorphismOfMonoids
id
?respId
Легкий выстрел для ?respId
в Refl
не работает, потому что слишком много доступных экземпляров Monoid
.Как я могу сказать компилятору, что я хотел бы использовать только экземпляр, полученный из определения monoidIdentity
?