
Keean Schupke wrote:
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