Safe Haskell  None 

Language  Haskell2010 
Documentation
Implicitly adding or subtracting values of two different (sub)types.
Implicitly multiplying values of two different (sub)types.
KnownNat ((+) m n) => Mult (Signed m) (Signed n)  
KnownNat ((+) m n) => Mult (Unsigned m) (Unsigned n)  
MultFixed rep frac1 frac2 size1 size2 => Mult (Fixed frac1 rep size1) (Fixed frac2 rep size2)  When used in a polymorphic setting, use the following Constraint synonyms for less verbose type signatures:

Coerce a value to be represented by a different number of bits
Resize Signed  A signpreserving resize operation Increasing the size of the number replicates the sign bit to the left. Truncating a number to length L keeps the sign bit and the rightmost L1 bits. 
Resize Unsigned  A resize operation that zeroextends on extension, and wraps on truncation. Increasing the size of the number extends with zeros to the left. Truncating a number of length N to a length L just removes the left (most significant) NL bits. 