Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Type inference in ST monad? (Aurimas)
2. Re: Type inference in ST monad? (David McBride)
3. Re: Type inference in ST monad? (Aurimas)
4. Re: How Haskell Fits Into an Operating System / API
Environment (Magnus Therning)
5. Re: How Haskell Fits Into an Operating System / API
Environment (Henk-Jan van Tuyl)
----------------------------------------------------------------------
Message: 1
Date: Mon, 19 Aug 2013 04:18:28 +0300
From: Aurimas <[email protected]>
To: [email protected]
Subject: [Haskell-beginners] Type inference in ST monad?
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
I have the following code which does not compile due to explicit type
annotation
(ST s Double). Error message says usual thing about "s" type variables.
----------------------------------------------------------------------------------------------------------
import Control.Monad.ST
import System.Random.MWC (initialize, uniformR, Gen)
import Control.Monad.Loops (whileM)
import Data.Vector (singleton)
import Data.Word(Word32)
main :: IO ()
main = do
print $ runSimulation 1
runSimulation :: Word32 -> [Int]
runSimulation seed = runST $ do
gen <- initialize (singleton seed)
whileM (do r1 <- uniformR (-1.0, 1.0) gen :: ST s Double -- does not
compile due to this
if r1 > 0.0 then return True else return False)
(do r2 <- uniformR (0, 10) gen
if r2 > 5 then return r2 else return 0)
---------------------------------------------------------------------------------------------------------
if I rewrite runSimulation like this (below), everything is OK.
---------------------------------------------------------------------------------------------------------
runSimulation :: Word32 -> [Int]
runSimulation seed = runST $ do
gen <- initialize (singleton seed)
whileM (do r1 <- tempFun gen
if r1 > 0.0 then return True else return False)
(do r2 <- uniformR (0, 10) gen
if r2 > 5 then return r2 else return 0)
where tempFun :: Gen s -> ST s Double -- this line automatically
provides required type annotation
tempFun g = uniformR (-1.0, 1.0) g
---------------------------------------------------------------------------------------------------------
Ca somebody explain what's wrong with the first version?
Best Regards,
Aurimas
------------------------------
Message: 2
Date: Sun, 18 Aug 2013 22:04:26 -0400
From: David McBride <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Type inference in ST monad?
Message-ID:
<CAN+Tr43yuhheV9qtDo1=uyrayhcmjy-znynr-yvcdnlpsto...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
I'm not exactly sure why you get the error, but the easiest way to fix it
is just to type it this way:
runSimulation :: Word32 -> [Int]
runSimulation seed = runST $ do
gen <- initialize (singleton seed)
whileM (do r1 <- uniformR (-1.0, 1.0 :: Double) gen
if r1 > 0.0 then return True else return False)
(do r2 <- uniformR (0, 10 :: Int) gen
if r2 > 5 then return r2 else return 0)
It has something to do with the forall s in runST, although I'm not
completely sure what.
On Sun, Aug 18, 2013 at 9:18 PM, Aurimas <[email protected]> wrote:
> I have the following code which does not compile due to explicit type
> annotation
> (ST s Double). Error message says usual thing about "s" type variables.
>
> ------------------------------**------------------------------**
> ------------------------------**----------------
> import Control.Monad.ST
> import System.Random.MWC (initialize, uniformR, Gen)
> import Control.Monad.Loops (whileM)
> import Data.Vector (singleton)
> import Data.Word(Word32)
>
> main :: IO ()
> main = do
> print $ runSimulation 1
>
> runSimulation :: Word32 -> [Int]
> runSimulation seed = runST $ do
> gen <- initialize (singleton seed)
> whileM (do r1 <- uniformR (-1.0, 1.0) gen :: ST s Double -- does not
> compile due to this
> if r1 > 0.0 then return True else return False)
> (do r2 <- uniformR (0, 10) gen
> if r2 > 5 then return r2 else return 0)
> ------------------------------**------------------------------**
> ------------------------------**---------------
>
> if I rewrite runSimulation like this (below), everything is OK.
>
> ------------------------------**------------------------------**
> ------------------------------**---------------
> runSimulation :: Word32 -> [Int]
> runSimulation seed = runST $ do
> gen <- initialize (singleton seed)
> whileM (do r1 <- tempFun gen
> if r1 > 0.0 then return True else return False)
> (do r2 <- uniformR (0, 10) gen
> if r2 > 5 then return r2 else return 0)
> where tempFun :: Gen s -> ST s Double -- this line automatically
> provides required type annotation
> tempFun g = uniformR (-1.0, 1.0) g
> ------------------------------**------------------------------**
> ------------------------------**---------------
>
> Ca somebody explain what's wrong with the first version?
>
> Best Regards,
> Aurimas
>
>
> ______________________________**_________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/**mailman/listinfo/beginners<http://www.haskell.org/mailman/listinfo/beginners>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20130818/be2f64e1/attachment-0001.html>
------------------------------
Message: 3
Date: Mon, 19 Aug 2013 08:36:10 +0300
From: Aurimas <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] Type inference in ST monad?
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
On 08/19/2013 05:04 AM, David McBride wrote:
> I'm not exactly sure why you get the error, but the easiest way to fix
> it is just to type it this way:
>
> runSimulation :: Word32 -> [Int]
> runSimulation seed = runST $ do
> gen <- initialize (singleton seed)
> whileM (do r1 <- uniformR (-1.0, 1.0 :: Double) gen
> if r1 > 0.0 then return True else return False)
> (do r2 <- uniformR (0, 10 :: Int) gen
> if r2 > 5 then return r2 else return 0)
>
> It has something to do with the forall s in runST, although I'm not
> completely sure what.
>
Thanks, this is clearly the most easy way to fix the problem. But the
question remains - why the line
"do r1 <- uniformR (-1.0, 1.0 :: Double) gen" cannot be annotated
with ST s Double?
------------------------------
Message: 4
Date: Mon, 19 Aug 2013 10:18:11 +0200
From: Magnus Therning <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] How Haskell Fits Into an Operating
System / API Environment
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"
On Sun, Aug 18, 2013 at 10:55:00AM +0200, Heinrich Apfelmus wrote:
> Philippe Sismondi wrote:
> >I am the original poster on this. [..]
[...]
> >At the risk of pouring fuel on the fire, I would ask: Can anyone
> >point me to scientific studies quantifying the benefits of pure
> >functional languages? I expect they exist, but I am interested not
> >just in lack of errors, but in overall productivity. (It's easy to
> >avoid program bugs: just write programs that don't do anything, or
> >don't write any software at all.)
>
> You know well that (1) such studies are hard to design for any
> language and (2) nobody asks for studies that quantify the benefits
> of imperative languages, simply because they happen to be the status
> quo.
>
> Still, there are some interesting case studies, for instance
>
> P Hudak and M P Jones
> "Haskell vs. Ada vs. C++ vs. Awk vs. ...
> An Experiment in Software Prototyping Productivity"
> http://haskell.cs.yale.edu/?post_type=publication&p=366
There are also a few articles on Erlang, and I believe there's good
reason to believe the results with that language can be transferred to
other "languages without assignment".
- Productivity gains with Erlarng
http://dl.acm.org/citation.cfm?id=1362710
slides: http://is.gd/BgGZyh
(behind a paywall, I haven't found a freely available copy)
- Breakthrough in software design productivity through the use of
declarative programming
http://www.sciencedirect.com/science/article/pii/S0925527397807669
(behind a paywall, I haven't found a freely available copy)
/M
--
Magnus Therning OpenPGP: 0xAB4DFBA4
email: [email protected] jabber: [email protected]
twitter: magthe http://therning.org/magnus
Perl is another example of filling a tiny, short-term need, and then
being a real problem in the longer term.
-- Alan Kay
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 230 bytes
Desc: not available
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20130819/6eed9bf1/attachment-0001.sig>
------------------------------
Message: 5
Date: Mon, 19 Aug 2013 12:52:20 +0200
From: "Henk-Jan van Tuyl" <[email protected]>
To: [email protected], "Magnus Therning" <[email protected]>
Subject: Re: [Haskell-beginners] How Haskell Fits Into an Operating
System / API Environment
Message-ID: <[email protected]>
Content-Type: text/plain; charset=iso-8859-15; format=flowed;
delsp=yes
On Mon, 19 Aug 2013 10:18:11 +0200, Magnus Therning <[email protected]>
wrote:
> There are also a few articles on Erlang, and I believe there's good
> reason to believe the results with that language can be transferred to
> other "languages without assignment".
>
> - Productivity gains with Erlarng
> http://dl.acm.org/citation.cfm?id=1362710
> slides: http://is.gd/BgGZyh
> (behind a paywall, I haven't found a freely available copy)
>
For free:
"Four-fold Increase in Productivity and Quality"
Ulf Wiger, FemSYS 2001, Munich
http://www.erlang.se/publications/Ulf_Wiger.pdf
Regards,
Henk-Jan van Tuyl
--
Folding@home
What if you could share your unused computer power to help find a cure? In
just 5 minutes you can join the world's biggest networked computer and get
us closer sooner. Watch the video.
http://folding.stanford.edu/
http://Van.Tuyl.eu/
http://members.chello.nl/hjgtuyl/tourdemonad.html
Haskell programming
--
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 62, Issue 19
*****************************************