Great job Stephen.
Thank for explaining . I got it to work.


On Tue, Apr 20, 2010 at 9:21 AM, Stephen Tetley <stephen.tetley@gmail.com> wrote:
Hi

If you are working with characteristic functions (Point -> Bool or
Point -> Colour...) the common way to do this is to manufacture a Num
instance for functions. This gives you syntax overloading of the (+,
-, *) operators. Similarly you might want to overload (or have to
overload) Floating, Fractional...

Examples using this technique are Jerzy Karczmarczuk's Clastic, Conal
Elliott's Vertigo, Tangible Values, Pan etc.

To overload Num you have to define Show and Eq instances for functions
as well. Something along the lines of this is adequate:

type CF = (Double,Double) -> Bool

instance Show CF where
 show _ = "<function>"

instance Eq CF where
 (==) _ _ = error "No Eq on  Characteristic functions"

instance Num CF where
 f + g = \pt -> f pt + g pt
 -- ...
 negate f = \(x,y) -> f (negate x, negate y)

 -- ... rest follows this pattern, Floating, Fractional similar

If you characteristic function is Point -> Bool then you also need a
Num instance for Bool.

All that said, I think your formulation of func above is slightly
wrong to fit this style. Its forming a function (-> Point) "to point"
rather than a characteristic function Point -> Bool.

Best wishes

Stephen
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org



--
Mujtaba Ali Alboori