Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  while loop (Sylvain Henry)
   2. Re:  while loop (PICCA Frederic-Emmanuel)
   3.  Random Numbers with the State Monad (Thomas Jakway)
   4. Re:  Random Numbers with the State Monad (Nikita Kartashov)
   5.  Unequal types constraint (Imants Cekusins)


----------------------------------------------------------------------

Message: 1
Date: Thu, 11 Feb 2016 13:11:45 +0100
From: Sylvain Henry <hsy...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] while loop
Message-ID:
        <capmptcuewmtswsgz6dgxt8uln6lmyraummgpjd3xkxpp60d...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi,

In these cases, I write the explicitly recursive version (e.g. getList1)
and look for a pattern (e.g. getList2).

getList1 :: Ptr List -> IO [Ptr Item]
getList1 l = c_get_first_item l >>= go
   where
      go e
         | e == nullPtr = return []
         | otherwise    = do
               next <- c_get_next_item l e
               es   <- go next
               return (e:es)



getList2 :: Ptr List -> IO [Ptr Item]
getList2 l = c_get_first_item l >>= unfoldrM go
   where
      go e
         | e == nullPtr = return Nothing
         | otherwise    = do
               next <- c_get_next_item l e
               return (Just (e,next))

I hope it helps
Sylvain



2016-02-11 12:02 GMT+01:00 PICCA Frederic-Emmanuel <
frederic-emmanuel.pi...@synchrotron-soleil.fr>:

> Hello,
>
> I am playing with FFI and I need to extract from a  C API a list of
> pointers.
>
> I have two methods available
>
> c_get_first_item :: Ptr List -> IO (Ptr Item)
> c_get_next_item :: Ptr List -> Ptr Item -> IO (Ptr Item)
>
> I would like to obtain a [Ptr Item]
>
> I try to used whileM but I did not find how to inject the first item in
> the loop.
>
> whileM (return . ( /= nullPtr)) (c_get_next_item list item)
>
> the c_get_next_item return a nullPtr when there is no remaining item.
>
> what is the haskell way in order to extract a list of pointer using these
> C methods ?
>
> thanks for your help
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20160211/e623ab53/attachment-0001.html>

------------------------------

Message: 2
Date: Thu, 11 Feb 2016 12:14:56 +0000
From: PICCA Frederic-Emmanuel
        <frederic-emmanuel.pi...@synchrotron-soleil.fr>
To: "The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell" <beginners@haskell.org>
Subject: Re: [Haskell-beginners] while loop
Message-ID:
        
<a2a20ec3b8560d408356cac2fc148e53b3036...@sun-dag3.synchrotron-soleil.fr>
        
Content-Type: text/plain; charset="iso-8859-1"

> I hope it helps

Yes a lot :))

thanks you very much (merci beaucoup :p)


Fr?d?ric

------------------------------

Message: 3
Date: Thu, 11 Feb 2016 20:14:08 -0500
From: Thomas Jakway <tjak...@nyu.edu>
To: "Beginners@haskell.org" ">>" The Haskell-Beginners Mailing List -
        Discussion of primarily beginner-level topics related to Haskell
        <beginners@haskell.org>
Subject: [Haskell-beginners] Random Numbers with the State Monad
Message-ID: <56bd31e0.4060...@nyu.edu>
Content-Type: text/plain; charset=utf-8; format=flowed

I'm having a bad time using the State monad to generate random numbers 
without carrying around a lot of StdGens manually.
I have this snippet in the IO monad:

     ... IO stuff ...
     gen <- getStdGen
     let (numPlayers, numMatches) = (evalState genRandVariables gen) :: 
(Integer, Integer)
     ... More IO stuff ...

     where maxRandPlayers = 10 :: Integer
           minRandMatches = 10 :: Integer
           maxRandMatches = 100 :: Integer
           genRandVariables = (do
                 np <- randomR (1, maxRandPlayers) --minimum 1 other player
                 nm <- randomR (minRandMatches, maxRandMatches)
                 return (np, nm)) :: State StdGen (Integer, Integer)


I get this error message:
test/Jakway/Blackjack/Tests/IntegrationTests/MatchTests.hs:53:23:
     Couldn't match expected type ?StateT
                                     StdGen 
Data.Functor.Identity.Identity Integer?
                 with actual type ?g0 -> (Integer, g0)?
     Probable cause: ?randomR? is applied to too few arguments
     In a stmt of a 'do' block: np <- randomR (1, maxRandPlayers)
     In the expression:
         (do { np <- randomR (1, maxRandPlayers);
               nm <- randomR (minRandMatches, maxRandMatches);
               return (np, nm) }) ::
           State StdGen (Integer, Integer)

test/Jakway/Blackjack/Tests/IntegrationTests/MatchTests.hs:54:23:
     Couldn't match expected type ?StateT
                                     StdGen 
Data.Functor.Identity.Identity Integer?
                 with actual type ?g1 -> (Integer, g1)?
     Probable cause: ?randomR? is applied to too few arguments
     In a stmt of a 'do' block:
       nm <- randomR (minRandMatches, maxRandMatches)
     In the expression:
         (do { np <- randomR (1, maxRandPlayers);
               nm <- randomR (minRandMatches, maxRandMatches);
               return (np, nm) }) ::
           State StdGen (Integer, Integer)

What's really baffling to me is I feel like this is how it *should* 
look--that the whole point of the state monad is to *not* have to 
explicitly pass the StdGen to randomR.  What am I doing wrong?


------------------------------

Message: 4
Date: Fri, 12 Feb 2016 14:38:01 +0300
From: Nikita Kartashov <snailandm...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Random Numbers with the State Monad
Message-ID: <11eee5c9-9376-4d75-8a1a-8b7d24c83...@gmail.com>
Content-Type: text/plain; charset="windows-1252"

Hi!

Take a look at MonadRandom [1]. It is basically what you want without getting 
generator explicitly.

[1] https://hackage.haskell.org/package/MonadRandom

With regards,
Nikita Kartashov



On 12 Feb 2016, at 04:14, Thomas Jakway <tjak...@nyu.edu> wrote:

> I'm having a bad time using the State monad to generate random numbers 
> without carrying around a lot of StdGens manually.
> I have this snippet in the IO monad:
> 
>    ... IO stuff ...
>    gen <- getStdGen
>    let (numPlayers, numMatches) = (evalState genRandVariables gen) :: 
> (Integer, Integer)
>    ... More IO stuff ...
> 
>    where maxRandPlayers = 10 :: Integer
>          minRandMatches = 10 :: Integer
>          maxRandMatches = 100 :: Integer
>          genRandVariables = (do
>                np <- randomR (1, maxRandPlayers) --minimum 1 other player
>                nm <- randomR (minRandMatches, maxRandMatches)
>                return (np, nm)) :: State StdGen (Integer, Integer)
> 
> 
> I get this error message:
> test/Jakway/Blackjack/Tests/IntegrationTests/MatchTests.hs:53:23:
>    Couldn't match expected type ?StateT
>                                    StdGen Data.Functor.Identity.Identity 
> Integer?
>                with actual type ?g0 -> (Integer, g0)?
>    Probable cause: ?randomR? is applied to too few arguments
>    In a stmt of a 'do' block: np <- randomR (1, maxRandPlayers)
>    In the expression:
>        (do { np <- randomR (1, maxRandPlayers);
>              nm <- randomR (minRandMatches, maxRandMatches);
>              return (np, nm) }) ::
>          State StdGen (Integer, Integer)
> 
> test/Jakway/Blackjack/Tests/IntegrationTests/MatchTests.hs:54:23:
>    Couldn't match expected type ?StateT
>                                    StdGen Data.Functor.Identity.Identity 
> Integer?
>                with actual type ?g1 -> (Integer, g1)?
>    Probable cause: ?randomR? is applied to too few arguments
>    In a stmt of a 'do' block:
>      nm <- randomR (minRandMatches, maxRandMatches)
>    In the expression:
>        (do { np <- randomR (1, maxRandPlayers);
>              nm <- randomR (minRandMatches, maxRandMatches);
>              return (np, nm) }) ::
>          State StdGen (Integer, Integer)
> 
> What's really baffling to me is I feel like this is how it *should* 
> look--that the whole point of the state monad is to *not* have to explicitly 
> pass the StdGen to randomR.  What am I doing wrong?
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20160212/a2a6387e/attachment-0001.html>

------------------------------

Message: 5
Date: Fri, 12 Feb 2016 12:43:57 +0100
From: Imants Cekusins <ima...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: [Haskell-beginners] Unequal types constraint
Message-ID:
        <CAP1qinZuisQUV+RG0PgE6J1rmWhQgByrONY3oqWM=qPgVU1k=a...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

class C a b

instance C Int a    -- when a /= Int

instance C a a     -- when a == a


how would you do this without IncoherentInstances?


------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 92, Issue 14
*****************************************

Reply via email to