
On Oct 20, 2010, at 5:06 PM, Thomas Schilling
Do we really want to treat every newtype wrappers as a form of 'id'? For example:
newtype Nat = Nat Integer -- must always be positive
A possible rule (doesn't actually typecheck, but you get the idea):
forall (x :: Nat). sqrt (x * x) = x
If we ignore newtyping we get an incorrect rewrite rule. It depends on the exact implementation of which 'id's would be recognised.
That wouldn't be generalized to id, the special treatment would only apply to rule that _mention_ Prelude.id explicitly. Such rules would implicitly fire when, say, "fmap Nat xs" occurs because Nat would be considered a specialization of id in the (pattern side of) rule "fmap id = id". Rules mentioning Nat would not be magical in any way. -- James