ある関数をポリモーフィックにしたいのだが、方法が分からない
ある関数とは以下のような目的のものだ

-1.0 以上 1.0 以下の範囲の Double 型の値があり、
これを Bounded クラスのインスタンス型の値に変換したのだが、
-1.0 を minBound の値に、1.0 を maxBound の値に、
その間を適当に補間した値にしたい

変換先の型が固定されていれば、例えば次のようにできた

quantize :: Double -> Int16
quantize x =
 let b = fromIntegral (minBound :: Int16)
   w = fromIntegral (maxBound :: Int16) - b
 in round $ (x + 1) / 2 * w + b

これを次のような意味に解釈できる形にしたい

quantize :: (Integral a, Bounded a) => Double -> a
quantize x =
 let b = fromIntegral (minBound :: a)
   w = fromIntegral (maxBound :: a) - b
 in round $ (x + 1) / 2 * w + b

言わんとしていることは分かってもらえると思うが、
当然このように記述すればエラーだ

この quantize 関数をポリモーフィックにする方法は何かないだろうか