
On Mon, Sep 9, 2013 at 7:26 PM, Bryan Vicknair
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
wrote: I put together a simple library and web app to demonstrate the behavior I'm seeing: git clone git@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!