Following the type of convert you have

    convert f fig = \(x,y) -> f (fig (x,y))
= { Lambda parameter }
    convert f fig (x,y) = f (fig (x,y))
= { point wise } 
    convert f fig (x,y) = (f . fig) (x,y)
= { $ operator }
    convert f fig (x,y) = f . fig $ (x,y)
= { (x,y) is a tuple parameter }
    convert f fig pos = f . fig $ pos
    
    
All those definitions for convert are equivalent and do the trick.

Moreover, if you define a Figure data type: 

data Figure a = Figure (Pos -> a)

the convert definition is: 

convert f (Figure g) = Figure (\pos -> f . g $ pos)

and corresponds to fmap function of the Functor class for the Figure data type, making a Figure an instance of Functor:

instance Functor Figure where
    fmap = convert


Cheers

Francisco


On Sun, Jun 22, 2014 at 7:13 PM, Peter Kaldenberg <pkaldenberg@gmail.com> wrote:
Dear all,

I have a problem, I am working on functional images and have now a problem that I need to write a function with the following signature

convert::(a->b)->Figure a ->Figure b

Where Figure a :: Pos -> a and type Pos= (Double, Double)

For instance I have an Image chessBoard.
chessBoard::Figure Bool
chessBoard(x,y)= even(round x)==even(round y)

I also have a function boolChar::Bool -> Char

now I want to call convert like convert boolChar chessBoard which will give me an Image with the following type Char.

How can I solve this problem?

Many thanks, Peter
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell



--
Francisco Jose CHAVES PhD