unit p where signature A where data A neg :: A -> A module P where import A f :: A -> A f = neg . neg unit r where module A where data B = X | Y type A = B neg :: B -> B neg X = Y neg Y = X unit q where dependency p[A=r:A] dependency r module M where import P import A g :: B g = f X