
On 9/17/10 12:48 PM, ender wrote:
my question is, why not define the function father and mother as type of father::Maybe Sheep -> Maybe Sheep? this can also clean the code and it avoid the additional function comb
Do note that `comb` is giving you a natural way of creating those functions: flip comb :: (a -> Maybe a) -> (Maybe a -> Maybe a) Since we can define comb, every (a -> Maybe a) has an associated function of type (Maybe a -> Maybe a). And if we use comb, then that means we can use the function at either type, just pick whichever one is easier for us to use at the time. If we only ever defined (Maybe a -> Maybe a) functions then we'd need to use a combinator to go the other way... f :: a -> Maybe a g :: Maybe a -> Maybe a f = ... g = flip comb f -- or -- f = g . Just g = ... Whether we use (flip comb) or (. Just) doesn't really matter too much. The point is that we can go both ways. -- Live well, ~wren