Refactoring, add Constrain function

Fixes #33
Fixes #32
I had not consider that, I'll make `Edge` conform then