
Great job Stephen.
Thank for explaining . I got it to work.
On Tue, Apr 20, 2010 at 9:21 AM, Stephen Tetley
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 http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Mujtaba Ali Alboori