opaque
see issue #576
Some constraints were being lost with the previous interface. This is why we had a workaround in fintype.lean. We can also remove some hacks we have used in the past.
closes #486