There are problems with this approach...
instance (Ord a, Num a) => ApproxEq a where x ~= y = (abs (x-y) < 1)
However it should do what you want with just -foverlapping-instances -fundecidable-instances.
Only -fallow-incoherent-instances allowes to resolve
3.5 ~= 2.6
without type-annotations! But when adding:
instance ApproxEq Double where x~=y = False
the above result remained True (via Defaulting) whereas
3.5 ~= (2.6 :: Double)
became False. (An the other hand there was no need to add such an instance for Double.)
It is also not possible to add a further instance like:
instance (Ord a, Fractional a) => ApproxEq a where x ~= y = (abs (x-y) < 0.1)
(hoping that fractionals are treated more accurate that nums) Only one instance for "ApproxEq a" is allowed.
Since the subject is "New to haskell" I recommend to stay Haskell98 compliant, i.e. avoid overlapping instances and add type signatures as necessary.
If you add the option -Wall (or -fwarn-type-defaults) to ghci you'll get a warning whenever "defaulting" occurs (like in 1.5 == 1.5 to Double)
(Putting "default ()" in your source file prevents defaulting, but I don't recommend to do so only to force types on decls like "f = 1.5")
Christian _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe