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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to