Oops, here's the code. Michael
=========================== {- Author: Jeff Newbern Maintainer: Jeff Newbern <jnewb...@nomaware.com> Time-stamp: <Mon Nov 10 11:59:14 2003> License: GPL -} {- DESCRIPTION Example 1 - Our first monad Usage: Compile the code and execute the resulting program. It will print Dolly's maternal grandfather. -} -- everything you need to know about sheep data Sheep = Sheep {name::String, mother::Maybe Sheep, father::Maybe Sheep} -- we show sheep by name instance Show Sheep where show s = show (name s) -- comb is a combinator for sequencing operations that return Maybe comb :: Maybe a -> (a -> Maybe b) -> Maybe b comb Nothing _ = Nothing comb (Just x) f = f x -- now we can use `comb` to build complicated sequences maternalGrandfather :: Sheep -> Maybe Sheep maternalGrandfather s = (Just s) `comb` mother `comb` father fathersMaternalGrandmother :: Sheep -> Maybe Sheep fathersMaternalGrandmother s = (Just s) `comb` father `comb` mother `comb` mother mothersPaternalGrandfather :: Sheep -> Maybe Sheep mothersPaternalGrandfather s = (Just s) `comb` mother `comb` father `comb` father -- this builds our sheep family tree breedSheep :: Sheep breedSheep = let adam = Sheep "Adam" Nothing Nothing eve = Sheep "Eve" Nothing Nothing uranus = Sheep "Uranus" Nothing Nothing gaea = Sheep "Gaea" Nothing Nothing kronos = Sheep "Kronos" (Just gaea) (Just uranus) holly = Sheep "Holly" (Just eve) (Just adam) roger = Sheep "Roger" (Just eve) (Just kronos) molly = Sheep "Molly" (Just holly) (Just roger) in Sheep "Dolly" (Just molly) Nothing -- print Dolly's maternal grandfather main :: IO () main = let dolly = breedSheep in do print (father dolly) -- END OF FILE --- On Wed, 4/29/09, Yitzchak Gale <g...@sefer.org> wrote: From: Yitzchak Gale <g...@sefer.org> Subject: Re: [Haskell-cafe] chr/ord? To: "michael rice" <nowg...@yahoo.com> Cc: "Brandon S. Allbery KF8NH" <allb...@ece.cmu.edu>, "haskell-cafe@haskell.org" <haskell-cafe@haskell.org> Date: Wednesday, April 29, 2009, 4:30 AM Michael Rice wrote: > -- comb is a combinator for sequencing operations that return Maybe > comb :: Maybe a -> (a -> Maybe b) -> Maybe b > comb Nothing _ = Nothing > comb (Just x) f = f x comb is essentially the same as something in the Prelude: it is just (>>=) specialized to Maybe. (>>=) :: Monad m => m a -> (a -> m b) -> m b > Now what am I misunderstanding in the code below? > lst = [('A',65),('B',66),('C',67),('D',68)] Brandon S. Allbery wrote: > ...it defaulted to [(Char,Integer)]. This is a manifestation > of the Monomorphism Restriction... While it may be debatable whether the Monomorphism Restriction is helpful in compiled code, it is unquestionably a major nuisance at the GHCi prompt, for this and other reasons. I highly recommend that you create a .ghci file in your home directory containing the line: :set -XNoMonomorphismRestriction In my opinion, MR should be off by default in GHCi. -Yitz
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe