Given are the two datatypes Color and Plant.
data Color = Red | Pink | White | Blue | Purple | Green | Yellow
deriving (Show, Eq)
data Plant =
Leaf
| Blossom Color
| Stalk Plant Plant
deriving (Show, Eq)
Now I'm supposed to implement a function fold_plant of following type:
(x -> x -> x) -> (Color -> x) -> x -> Plant -> x
The way I understand a fold function is that it takes a list and for each iteration it removes the first element from the list and does something with that element.
Apparently fold_plant Stalk Blossom Leaf is the identity on plants.
Now I know that in Haskell you make functions like this:
fold_plant :: (x -> x -> x) -> (Color -> x) -> x -> Plant -> x
fold_plant = do something
But from here on I don't know how a fold function would work an a plant.