Neil Mitchell wrote:
Other rules that could be interesting are:
 > forall a b. fromInteger a + fromInteger b = fromInteger (a + b)
 > forall a b. fromInteger a * fromInteger b = fromInteger (a * b)

This is wrong, since the class function can do what it wants. Imagine:

instance Num String where
   (+) = (++)
   fromInteger x = show x

1 + 2 :: String

this expression now goes from "12" to "3" by applying this rule.

You need to be incredibly careful if there are any classes floating around.

Do we assume Num instances to obey Num axioms, just like Arrow instances to obey Arrow axioms? My impression is that the GHC de-sugaring of the proc notation contains an optimizing stage that uses arrow axioms. This is a good precedence.

If Num obeys ring axioms, fromInteger is a perfectly fine ring-homomorphism. (It's also the first or second homomorphism taught.)

If a and b are large integers and the target ring is small, fromInteger (a + b) is likely slower. That is my concern.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to