class (Path p, CompletePath (CompletedPath p)) => IncompletePath p where type CompletedPath p :: * AIUI, this isn't implemented yet. You'll have to place the constraint on each involved function.
class (Path p, CompletePath (CompletedPath p)) => IncompletePath p where type CompletedPath p :: *