
Hello all I've a type family DUnit that I use to allow the unit type, usually a Double, of geometric things (points, vectors...) to be parametric:
type family DUnit a :: *
E.g for Points
data Point u = P2 u u
type instance (Point u) = u
I can make an type instance for Maybe like this, using DUnit on the right hand side:
type instance DUnit (Maybe a) = DUnit a
But pair is a problem. Is there a way to assert both parts of a pair should have the same DUnit? The code below won't compile but it should illustrate what I'm trying to do.
type instance (DUnit a ~ DUnit b) => DUnit (a,b) = DUnit a
I don't want to pick an arbitrary side, e.g:
type instance DUnit (a,b) = DUnit a
or
type instance DUnit (a,b) = DUnit b
Thanks Best wishes Stephen