It is very convenient to use class (+) infixl 6 a :: !*a !a -> .a for example, instance + BigInt where (+) a b = add_inplace_UB_B a b thus, fn1 :: *a .a -> *a | + a fn2 :: v:a u:a -> v:a | SomeClass a , [v <= u] are quite possible in real programs.