[Haskell-cafe] Overriding a Prelude function?
Luke Palmer
lrpalmer at gmail.com
Wed Apr 22 17:02:39 EDT 2009
On Wed, Apr 22, 2009 at 1:47 PM, michael rice <nowgate at yahoo.com> wrote:
> Here's what I get:
>
> [michael at localhost ~]$ ghci
> GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help
> Loading package ghc-prim ... linking ... done.
> Loading package integer ... linking ... done.
> Loading package base ... linking ... done.
> Prelude> import Prelude hiding ((>>))
You know, to avoid this nonsense you could just name the operator something
else, like >>~, or ~>>, or $@**!. Operators are just names.
Luke
>
>
> <interactive>:1:0: parse error on input `import'
> Prelude>
>
> =====
>
> I was passing seed0 to rollDie and getting back (r1,seed1)
> passing seed1 to rollDie and getting back (r2,seed2)
> passing seed2 to rollDie and getting back (r3,seed3)
>
> Just based on the problem text, I would guess that
> passing rollDie and seed0 to (>>) I would get back (r3,seed3),
> losing the intermediate random numbers r1 and r2 along the way, at
> least that's what I understood it to say.
>
> So, I know that next I'm probably going to have to do something to
> remedy that, but I haven't gotten to that next step yet. What is unsugar?
>
> Thanks in advance for your patience.
>
> Michael
>
>
> --- On *Wed, 4/22/09, Dan Weston <westondan at imageworks.com>* wrote:
>
>
> From: Dan Weston <westondan at imageworks.com>
> Subject: Re: [Haskell-cafe] Overriding a Prelude function?
> To: "Ross Mellgren" <rmm-haskell at z.odi.ac>
> Cc: "michael rice" <nowgate at yahoo.com>, "haskell-cafe at haskell.org" <
> haskell-cafe at haskell.org>
> Date: Wednesday, April 22, 2009, 12:37 PM
>
> Be aware that the do unsugars to (Prelude.>>), not your (>>), even if you
> hide (Prelude.>>):
>
> import Prelude hiding ((>>))
> m >> f = error "Call me!"
> main = putStrLn . show $ do [3,4]
> [5]
>
> The desugaring of the do { [3,4]; [5] } is (Prelude.>>) [3,4] [5] = [5,5],
> whereas you might have hoped for [3,4] >> [5] = error "Call me!"
>
> Dan
>
> Ross Mellgren wrote:
> > I think
> >
> > import Prelude hiding ((>>))
> >
> > does that.
> >
> > -Ross
> >
> > On Apr 22, 2009, at 11:44 AM, michael rice wrote:
> >
> >> I've been working through this example from:
> http://en.wikibooks.org/wiki/Haskell/Understanding_monads
> >>
> >> I understand what they're doing all the way up to the definition of
> (>>), which duplicates Prelude function (>>). To continue following the
> example, I need to know how to override the Prelude (>>) with the (>>)
> definition in my file rand.hs.
> >>
> >> Michael
> >>
> >> ==============
> >>
> >> [michael at localhost ~]$ cat rand.hs
> >> import System.Random
> >>
> >> type Seed = Int
> >>
> >> randomNext :: Seed -> Seed
> >> randomNext rand = if newRand > 0 then newRand else newRand + 2147483647
> >> where newRand = 16807 * lo - 2836 * hi
> >> (hi,lo) = rand `divMod` 127773
> >>
> >> toDieRoll :: Seed -> Int
> >> toDieRoll seed = (seed `mod` 6) + 1
> >>
> >> rollDie :: Seed -> (Int, Seed)
> >> rollDie seed = ((seed `mod` 6) + 1, randomNext seed)
> >>
> >> sumTwoDice :: Seed -> (Int, Seed)
> >> sumTwoDice seed0 =
> >> let (die1, seed1) = rollDie seed0
> >> (die2, seed2) = rollDie seed1
> >> in (die1 + die2, seed2)
> >>
> >> (>>) m n = \seed0 ->
> >> let (result1, seed1) = m seed0
> >> (result2, seed2) = n seed1
> >> in (result2, seed2)
> >>
> >> [michael at localhost ~]$
> >>
> >>
> >> _______________________________________________
> >> Haskell-Cafe mailing list
> >> Haskell-Cafe at haskell.org<http://mc/compose?to=Haskell-Cafe@haskell.org><mailto:
> Haskell-Cafe at haskell.org <http://mc/compose?to=Haskell-Cafe@haskell.org>>
> >> http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090422/90e82a72/attachment.htm
More information about the Haskell-Cafe
mailing list