Send Beginners mailing list submissions to
        beginners@haskell.org

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
        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.  wxHaskell programm segfaults when copying shared object
      files into same directory (Nathan H?sken)
   2.  truncate results depend on strict/lazy (Bryan Vicknair)
   3. Re:  truncate results depend on strict/lazy (Mihai Maruseac)
   4. Re:  truncate results depend on strict/lazy (Chadda? Fouch?)
   5. Re:  truncate results depend on strict/lazy (Bryan Vicknair)
   6. Re:  truncate results depend on strict/lazy (Mihai Maruseac)
   7. Re:  truncate results depend on strict/lazy (Bryan Vicknair)
   8. Re:  truncate results depend on strict/lazy (Bryan Vicknair)


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

Message: 1
Date: Mon, 09 Sep 2013 17:55:52 +0200
From: Nathan H?sken <nathan.hues...@posteo.de>
To: Haskell Beginners Mailinglist <beginners@haskell.org>
Subject: [Haskell-beginners] wxHaskell programm segfaults when copying
        shared object files into same directory
Message-ID: <522def88.4020...@posteo.de>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Hey,

I have a small wxHaskell program, compiled under ubuntu linux.
I want to give it (in a compiled version) to a friend. Since wxHaskell 
seems to work only with shared linking, the program depends on a lot of 
*.so files. Trying to send the so files with the program, I copied all 
of them (all which are wxHaskell related) into the same directory as the 
program. Interestingly when I do this, and try to run the program it 
segfaults.

Anyone has an Idea why?

Thanks!
Nathan



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

Message: 2
Date: Mon, 9 Sep 2013 10:26:40 -0700
From: Bryan Vicknair <bryanv...@gmail.com>
To: beginners@haskell.org
Subject: [Haskell-beginners] truncate results depend on strict/lazy
Message-ID: <20130909172640.GB11030@bry-m6300>
Content-Type: text/plain; charset=us-ascii

Deep in a WAI web app, I have a function that converts a String from a web form
like "0.12" to an Int 12.  Converting "0.12" to the Float 0.12 is working.
However, converting the Float 0.12 to the Int 12 does not work as expected
unless I use the trace function.

In the following, f = 0.12::Float, gotten from a function that parses "0.12"
into 0.12.

In the following expression, the result is: Success (Just 11).

> Success $ Just $ truncate (f * 100)

In the following expression, the result is: Success (Just 12)

> let expanded =  f * 100
>     ans      = truncate expanded
> in trace (show expanded) $ Success $ Just $ ans

That made me think that "f * 100" had to be strictly evaluated before given to
truncate for some reason, so I tried using seq to get the same effect, but that
didn't work.  Am I correct in assuming that laziness has something to do with
this problem?



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

Message: 3
Date: Mon, 9 Sep 2013 13:34:24 -0400
From: Mihai Maruseac <mihai.marus...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] truncate results depend on
        strict/lazy
Message-ID:
        <CAOMsUML_ajNE5t_=dhnb29xjybjxm2jzn5hojw6bemaawky...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

On Mon, Sep 9, 2013 at 1:26 PM, Bryan Vicknair <bryanv...@gmail.com> wrote:
> Deep in a WAI web app, I have a function that converts a String from a web 
> form
> like "0.12" to an Int 12.  Converting "0.12" to the Float 0.12 is working.
> However, converting the Float 0.12 to the Int 12 does not work as expected
> unless I use the trace function.

Not answering your question but can't you read . drop 1 . dropWhile
(/= '.') $ "0.12" ?

>
> In the following, f = 0.12::Float, gotten from a function that parses "0.12"
> into 0.12.
>
> In the following expression, the result is: Success (Just 11).
>
>> Success $ Just $ truncate (f * 100)
>
> In the following expression, the result is: Success (Just 12)
>
>> let expanded =  f * 100
>>     ans      = truncate expanded
>> in trace (show expanded) $ Success $ Just $ ans
>
> That made me think that "f * 100" had to be strictly evaluated before given to
> truncate for some reason, so I tried using seq to get the same effect, but 
> that
> didn't work.  Am I correct in assuming that laziness has something to do with
> this problem?
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners



-- 
MM
"All we have to decide is what we do with the time that is given to us"



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

Message: 4
Date: Mon, 9 Sep 2013 19:59:28 +0200
From: Chadda? Fouch? <chaddai.fou...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] truncate results depend on
        strict/lazy
Message-ID:
        <CANfjZRadRSKay-Vb6YUi=whrlucpv5z0g2aseokfy0wj5po...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

On Mon, Sep 9, 2013 at 7:26 PM, Bryan Vicknair <bryanv...@gmail.com> wrote:

> Deep in a WAI web app, I have a function that converts a String from a web
> form
> like "0.12" to an Int 12.  Converting "0.12" to the Float 0.12 is working.
> However, converting the Float 0.12 to the Int 12 does not work as expected
> unless I use the trace function.
>
> In the following, f = 0.12::Float, gotten from a function that parses
> "0.12"
> into 0.12.
>
> In the following expression, the result is: Success (Just 11).
>
> > Success $ Just $ truncate (f * 100)
>
> In the following expression, the result is: Success (Just 12)
>
> > let expanded =  f * 100
> >     ans      = truncate expanded
> > in trace (show expanded) $ Success $ Just $ ans
>
> That made me think that "f * 100" had to be strictly evaluated before
> given to
> truncate for some reason, so I tried using seq to get the same effect, but
> that
> didn't work.  Am I correct in assuming that laziness has something to do
> with
> this problem?
>
>
It would be a serious bug if that was true since lazyness shouldn't change
the semantic of a program, except sometimes by allowing the program to
terminate where the strict version wouldn't.

On the other hand I can't reproduce your bug, couldn't you provide more
details (including GHC version and parsing code)

-- 
Jeda?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20130909/5f661079/attachment-0001.html>

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

Message: 5
Date: Mon, 9 Sep 2013 10:59:24 -0700
From: Bryan Vicknair <bryanv...@gmail.com>
To: beginners@haskell.org
Subject: Re: [Haskell-beginners] truncate results depend on
        strict/lazy
Message-ID: <20130909175924.GC11030@bry-m6300>
Content-Type: text/plain; charset=us-ascii

On Mon, Sep 09, 2013 at 01:34:24PM -0400, Mihai Maruseac wrote:
> On Mon, Sep 9, 2013 at 1:26 PM, Bryan Vicknair <bryanv...@gmail.com> wrote:
> > Deep in a WAI web app, I have a function that converts a String from a web 
> > form
> > like "0.12" to an Int 12.  Converting "0.12" to the Float 0.12 is working.
> > However, converting the Float 0.12 to the Int 12 does not work as expected
> > unless I use the trace function.
> 
> Not answering your question but can't you read . drop 1 . dropWhile
> (/= '.') $ "0.12" ?

That would work for the specific input of "0.xyz", but in general, the input
string may encode a float with an arbitrary number of digits on both sides of
the decimal.

In reality, the range is probaby from 0.10 to 1.99, so I considered writing a
parser for just that range, and I may still, but this behavior is so surprising
to me that I feel like I need to understand it.



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

Message: 6
Date: Mon, 9 Sep 2013 14:15:57 -0400
From: Mihai Maruseac <mihai.marus...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] truncate results depend on
        strict/lazy
Message-ID:
        <CAOMsUMLCxM0=tac4qetjpavwjrcv1ezowneeymmx76l1xgy...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

On Mon, Sep 9, 2013 at 1:59 PM, Bryan Vicknair <bryanv...@gmail.com> wrote:
> That would work for the specific input of "0.xyz", but in general, the input
> string may encode a float with an arbitrary number of digits on both sides of
> the decimal.


So, you'd need to convert 10.34 to 1034? I'd start with span (/= '.')
"10.32" and go from there :) (span from Data.Char)

-- 
MM
"All we have to decide is what we do with the time that is given to us"



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

Message: 7
Date: Mon, 9 Sep 2013 14:57:07 -0700
From: Bryan Vicknair <bryanv...@gmail.com>
To: beginners@haskell.org
Subject: Re: [Haskell-beginners] truncate results depend on
        strict/lazy
Message-ID: <20130909215707.GA6113@bry-m6300>
Content-Type: text/plain; charset=iso-8859-1

On Mon, Sep 09, 2013 at 07:59:28PM +0200, Chadda? Fouch? wrote:
> > In the following expression, the result is: Success (Just 11).
> >
> > > Success $ Just $ truncate (f * 100)
> >
> > In the following expression, the result is: Success (Just 12)
> >
> > > let expanded =  f * 100
> > >     ans      = truncate expanded
> > > in trace (show expanded) $ Success $ Just $ ans
> >
> > That made me think that "f * 100" had to be strictly evaluated before
> > given to
> > truncate for some reason, so I tried using seq to get the same effect, but
> > that
> > didn't work.  Am I correct in assuming that laziness has something to do
> > with
> > this problem?
> >
> >
> It would be a serious bug if that was true since lazyness shouldn't change
> the semantic of a program, except sometimes by allowing the program to
> terminate where the strict version wouldn't.
> 
> On the other hand I can't reproduce your bug, couldn't you provide more
> details (including GHC version and parsing code)
> 
> -- 
> Jeda?

I put together a simple library and web app to demonstrate the behavior I'm
seeing: git clone g...@bitbucket.org:bryanvick/truncate.git

The README has simple instructions to view the behavior in a repl or in a web
app.  The Lib.hs file is where the parsing code is.

I swear I saw different behaviour between separate cabal sandboxes while I was
testing this.  Sometimes the parsing would work as expected, sometimes it
wouldn't.  That made me think that maybe different versions of dependencies are
being installed for different runs.  I'll start paying attention to
"cabal sandbox hc-pkg" to see if this is the case.



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

Message: 8
Date: Mon, 9 Sep 2013 15:08:34 -0700
From: Bryan Vicknair <bryanv...@gmail.com>
To: beginners@haskell.org
Subject: Re: [Haskell-beginners] truncate results depend on
        strict/lazy
Message-ID: <20130909220834.GB6113@bry-m6300>
Content-Type: text/plain; charset=us-ascii

> On Mon, Sep 9, 2013 at 7:26 PM, Bryan Vicknair <bryanv...@gmail.com> wrote:
> > Deep in a WAI web app, I have a function that converts a String from a web
> > form
> > like "0.12" to an Int 12.  Converting "0.12" to the Float 0.12 is working.
> > However, converting the Float 0.12 to the Int 12 does not work as expected
> > unless I use the trace function.

> On Mon, Sep 9, 2013 Bryan Vicknair <bryanv...@gmail.com> wrote:
> I put together a simple library and web app to demonstrate the behavior I'm
> seeing: git clone g...@bitbucket.org:bryanvick/truncate.git
> 
> The README has simple instructions to view the behavior in a repl or in a web
> app.  The Lib.hs file is where the parsing code is.
> 
> I swear I saw different behaviour between separate cabal sandboxes while I was
> testing this.  Sometimes the parsing would work as expected, sometimes it
> wouldn't.  That made me think that maybe different versions of dependencies 
> are
> being installed for different runs.  I'll start paying attention to
> "cabal sandbox hc-pkg" to see if this is the case.

I just witnessed the parsing code in question giving different results in
different invocations of a repl in the same cabal sandbox.

I started a cabal sandbox and installed dependencies:

  > cabal sandbox init
  > cabal install --only-dependencies
  ... <bunch of compiling>

I started a repl...

  > cabal repl
  Package has never been configured. Configuring with default flags. If this
  fails, please run configure manually.
  Resolving dependencies...
  Configuring app-0...
  Preprocessing library app-0...
  GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
  Loading package ghc-prim ... linking ... done.
  Loading package integer-gmp ... linking ... done.
  Loading package base ... linking ... done.
  Loading package bytestring-0.9.2.1 ... linking ... done.
  Loading package array-0.4.0.0 ... linking ... done.
  Loading package deepseq-1.3.0.0 ... linking ... done.
  Loading package containers-0.4.2.1 ... linking ... done.
  Loading package transformers-0.3.0.0 ... linking ... done.
  Loading package mtl-2.1.2 ... linking ... done.
  Loading package text-0.11.3.1 ... linking ... done.
  Loading package digestive-functors-0.6.1.0 ... linking ... done.
  [1 of 1] Compiling Lib              ( Lib.hs, interpreted )
  Ok, modules loaded: Lib.
  *Lib> import Data.Text (pack)

And this time, the parsing works!

  *Lib Data.Text> validateVal $ pack "0.12"
  Success (Just 12)
  *Lib Data.Text> :q
  Leaving GHCi.

I did a dump of the libraries installed to compare to later sandboxes that 
don't work:

  > cabal sandbox hc-pkg list > /tmp/working-deps

I ran the web app:

  > cabal run
  Building app-0...
  Preprocessing library app-0...
  [1 of 1] Compiling Lib              ( Lib.hs, dist/build/Lib.o )
  In-place registering app-0...
  Preprocessing executable 'app' for app-0...
  [1 of 2] Compiling Lib              ( Lib.hs, dist/build/app/app-tmp/Lib.o )
  [2 of 2] Compiling Main             ( app.hs, dist/build/app/app-tmp/Main.o )
  
  app.hs:67:21: Warning: Defined but not used: `name'
  
  app.hs:67:37: Warning: Defined but not used: `val'
  Linking dist/build/app/app ...
  running at port 8005
  Thing {name = "name", val = Just 11}

The parsing didn't work there, as usual.  So I went back into the repl:

  > cabal repl
  Preprocessing library app-0...
  GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
  Loading package ghc-prim ... linking ... done.
  Loading package integer-gmp ... linking ... done.
  Loading package base ... linking ... done.
  Loading package bytestring-0.9.2.1 ... linking ... done.
  Loading package array-0.4.0.0 ... linking ... done.
  Loading package deepseq-1.3.0.0 ... linking ... done.
  Loading package containers-0.4.2.1 ... linking ... done.
  Loading package transformers-0.3.0.0 ... linking ... done.
  Loading package mtl-2.1.2 ... linking ... done.
  Loading package text-0.11.3.1 ... linking ... done.
  Loading package digestive-functors-0.6.1.0 ... linking ... done.
  Ok, modules loaded: Lib.
  Prelude Lib> import Data.Text (pack)

And all of a sudden, the parsing code doesn't work again!:

  Prelude Data.Text Lib> validateVal $ pack "0.12"
  Success (Just 11)

I'm loosing my mind!



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

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


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

End of Beginners Digest, Vol 63, Issue 13
*****************************************

Reply via email to