Adam Zachary Wyner wrote:
Hi All,
After some weeks of experimenting and digging around, I understand that
functions cannot be compared for equality. Thanks to Bjorn Lisper for
pointing this out. I basically understand (?) the underlying mathematical
issue, which is that functions in general may have infinite domains...
Other suggestions?
You can define equality for functions with finite domains. See the
enclosed Haskell module.
Loading package base ... linking ... done.
Compiling Finite ( Finite.hs, interpreted )
Ok, modules loaded: Finite.
*Finite> not == not
True
*Finite> (&&) == (&&)
True
*Finite> (&&) == (||)
False
--
Thomas H
module Finite where
instance (Finite a, Eq b) => Eq (a->b) where
f == g = and [ f x == g x | x <- allValues ]
-- A class for finite types
class Finite a where
allValues :: [a]
instance Finite () where allValues = [()]
instance Finite Bool where allValues = [False,True]
--instance Finite Ordering where ...
--instance Finite Char where ...
--instance Finite Int where ...
instance (Finite a,Finite b) => Finite (a,b) where
allValues = [ (x,y) | x<-allValues, y<-allValues]
instance Finite a => Finite (Maybe a) where
allValues = Nothing:[Just x|x<-allValues]
instance (Finite a,Finite b) => Finite (Either a b) where
allValues = [Left x|x<-allValues]++[Right y|y<-allValues]
-- ...
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe