[Haskell-beginners] ghci and randomRs

Jeff C. Britton jcb at iteris.com
Tue Sep 16 17:43:04 UTC 2014


Ok, I got it now.  I was misunderstanding how the REPL was interacting with the IO Monad.
I had once tried
do { g <- newStdGen; take 10 $ randomRs (1,6) g  }

but I actually needed this
do { g <- newStdGen; return . take 10 $ randomRs (1,6) g  }

Thanks,
Jeff

From: Beginners [mailto:beginners-bounces at haskell.org] On Behalf Of David McBride
Sent: Monday, September 15, 2014 7:27 PM
To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell
Subject: Re: [Haskell-beginners] ghci and randomRs

The simple answer is with do notation:
main = do
  g <- newStdGen
  print $ randomRs (1,2) g
Or without do notation, something like:
newStdGen >>= print . take 10 . randomRs (1,2)

On Mon, Sep 15, 2014 at 10:01 PM, Jeff C. Britton <jcb at iteris.com<mailto:jcb at iteris.com>> wrote:
I am trying to use randomRs at the ghci prompt like so

Prelude System.Random> take 10 $ (randomRs (1, 6) newStdGen)

but I get the following error
<interactive>:16:12:
    Could not deduce (RandomGen (IO StdGen))
      arising from a use of `randomRs'
    from the context (Random a, Num a)
      bound by the inferred type of it :: (Random a, Num a) => [a]
      at <interactive>:16:1-37
    In the second argument of `($)', namely
      `(randomRs (1, 6) newStdGen)'
    In the expression: take 10 $ (randomRs (1, 6) newStdGen)
    In an equation for `it': it = take 10 $ (randomRs (1, 6) newStdGen)


I have tried a variety of options, like wrapping it in a "do" or adding type annotations.
Nothing seems to work.



-----Original Message-----
From: Beginners [mailto:beginners-bounces at haskell.org<mailto:beginners-bounces at haskell.org>] On Behalf Of martin
Sent: Friday, September 12, 2014 10:05 AM
To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell
Subject: Re: [Haskell-beginners] How to add a "method" to a record

Am 09/10/2014 08:50 PM, schrieb Corentin Dupont:
> If the field "label" can be deduced from "payload", I recommend not to
> include it in your structure, because that would be redundant.
>
> Here how you could write it:
>
> data Foo pl = Foo { payload :: pl}
>
> labelInt :: Foo Int -> String
> labelInt (Foo a) = "Int payload:" ++ (show a)
>
> labelString :: Foo String -> String
> labelString (Foo a) = "String payload" ++ a
>
> You are obliged to define two separate label function, because "Foo Int" and "Foo String" are two completly separate types.

This is exactly my problem: Someone will use this type an define the type of pl. How can I know what type she'll use?
What I'd like to express is that whoever creates a concrete type should also provide the proper label function.

>
>         On Wed, Sep 10, 2014 at 2:06 PM, martin <martin.drautzburg at web.de<mailto:martin.drautzburg at web.de>> wrote:
>
>             Hello all
>
>             if I have a record like
>
>                     data Foo pl = Foo {
>                                 label :: String,
>                                 payload :: pl
>                             }
>
>             how can I create a similar type where I can populate label so it is not a plain string, but a function which
>             operates on
>             payload? Something like
>
>                     label (Foo pl) = show pl
>

_______________________________________________
Beginners mailing list
Beginners at haskell.org<mailto:Beginners at haskell.org>
http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________
Beginners mailing list
Beginners at haskell.org<mailto:Beginners at haskell.org>
http://www.haskell.org/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20140916/2958a84b/attachment.html>


More information about the Beginners mailing list