Not comfortable with Square Root behaviour... Wish I had haskell typeclasses. Guess the best way to handle this is partial template specification?