Hmm, this is no good, because the constraints mean we can only ever call this function on things which are instances of all three classes, which defeats the whole purpose.  I think we instead want something more like

```haskell
data AlignOpts a = AlignOpts { boundary :: V a -> a -> Point (V a) }
```

(note the type parameter to `AlignOpts`).

Also, I think you misspelled `boundary`.