[Haskell-cafe] Two GET HTTP requests

2010-02-05 Thread Chris Eidhof
Hi everyone,

I'm trying to do a number of successive HTTP requests in one program. Here's 
what I tried:

Approach 1: I used the 'download' package, which failed to install on OS X. It 
fails with "error: libio.h: No such file or directory".

Approach 2: I installed the 'download-curl' package, and tried again. This 
seems to fail on the following example:

> import Network.Curl.Download
> 
> main = do x <- openURI "http://haskell.org";
>   y <- openURI "http://haskell.org/hoogle";
>   return ()

If I put a print statement around the second line of the do-statement it looks 
like openURI never returns.

Approach 3: I used the simpleHTTP function from the HTTP package. This crashed, 
after I dug a little deeper into the code, it threw an error on calling the 
parseURI function (openFile: no such file exists). I installed the latest 
network package and upgraded my HTTP package, and the parseURI error went away. 
I felt like I was almost there, and tried the following:

> simpleHTTP (getRequest "http://haskell.org";)

This failed with just the text "Bus error". I searched the HTTPBis git 
repository, but couldn't find the text "Bus error". I don't have a clue of how 
to fix this.

I'm a bit stuck here, I would love to help fix the errors, but don't know what 
would be the best place to begin. If anyone can point me in the right 
direction, I will try to patch at least one of these packages.

Thanks,

-chris

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-07 Thread Yusaku Hashimoto
Hello,

On Sat, Feb 6, 2010 at 2:51 AM, Chris Eidhof  wrote:
> Approach 3: I used the simpleHTTP function from the HTTP package. This 
> crashed, after I dug a little deeper into the code, it threw an error on 
> calling the parseURI function (openFile: no such file exists). I installed 
> the latest network package and upgraded my HTTP package, and the parseURI 
> error went away. I felt like I was almost there, and tried the following:
>
>> simpleHTTP (getRequest "http://haskell.org";)
>
> This failed with just the text "Bus error". I searched the HTTPBis git 
> repository, but couldn't find the text "Bus error". I don't have a clue of 
> how to fix this.

Try reinstall network package with `cabal install --reinstall
--hsc2hs-options="--cflag=-m32 --lflag=-m32"`.

See also: http://hackage.haskell.org/trac/ghc/ticket/3681

Hope this helps.
--nwn
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-07 Thread Chris Eidhof
Thanks. Unfortunately, it didn't help. The thing that frustrates me is that 
it's quite hard to debug. I guess I'll upgrade my GHC to 6.12, hopefully 
that'll solve it.

-chris

On 7 feb 2010, at 16:07, Yusaku Hashimoto wrote:

> Hello,
> 
> On Sat, Feb 6, 2010 at 2:51 AM, Chris Eidhof  wrote:
>> Approach 3: I used the simpleHTTP function from the HTTP package. This 
>> crashed, after I dug a little deeper into the code, it threw an error on 
>> calling the parseURI function (openFile: no such file exists). I installed 
>> the latest network package and upgraded my HTTP package, and the parseURI 
>> error went away. I felt like I was almost there, and tried the following:
>> 
>>> simpleHTTP (getRequest "http://haskell.org";)
>> 
>> This failed with just the text "Bus error". I searched the HTTPBis git 
>> repository, but couldn't find the text "Bus error". I don't have a clue of 
>> how to fix this.
> 
> Try reinstall network package with `cabal install --reinstall
> --hsc2hs-options="--cflag=-m32 --lflag=-m32"`.
> 
> See also: http://hackage.haskell.org/trac/ghc/ticket/3681
> 
> Hope this helps.
> --nwn

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-07 Thread Ben Millwood
On Fri, Feb 5, 2010 at 5:51 PM, Chris Eidhof  wrote:
> Approach 2: I installed the 'download-curl' package, and tried again. This 
> seems to fail on the following example:
>
>> import Network.Curl.Download
>>
>> main = do x <- openURI "http://haskell.org";
>>           y <- openURI "http://haskell.org/hoogle";
>>           return ()
>
> If I put a print statement around the second line of the do-statement it 
> looks like openURI never returns.
>

I think you're supposed to use withCurlDo:
http://hackage.haskell.org/packages/archive/curl/latest/doc/html/Network-Curl.html#v%3AwithCurlDo
with the curl library. Could be wrong about that, haven't tried it myself.

> Approach 3: I used the simpleHTTP function from the HTTP package. This 
> crashed, after I dug a little deeper into the code, it threw an error on 
> calling the parseURI function (openFile: no such file exists). I installed 
> the latest network package and upgraded my HTTP package, and the parseURI 
> error went away. I felt like I was almost there, and tried the following:
>
>> simpleHTTP (getRequest "http://haskell.org";)
>
> This failed with just the text "Bus error". I searched the HTTPBis git 
> repository, but couldn't find the text "Bus error". I don't have a clue of 
> how to fix this.

"Bus error" is a message generated by the operating system. On OS X,
it can mean a null dereference, which is very unusual. I'm not sure
how you'd debug it either - the most common cause when you're talking
about C applications is programmer error, but Network.HTTP is
specifically designed to be pure Haskell, and it's not easy to induce
a null dereference from Haskell.

> I'm a bit stuck here, I would love to help fix the errors, but don't know 
> what would be the best place to begin. If anyone can point me in the right 
> direction, I will try to patch at least one of these packages.

I don't think anyone would blame you if you didn't manage it, none of
those are particularly friendly errors.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-07 Thread Lars Viklund
On Sun, Feb 07, 2010 at 05:12:23PM +, Ben Millwood wrote:
> > This failed with just the text "Bus error". I searched the HTTPBis git 
> > repository, but couldn't find the text "Bus error". I don't have a clue of 
> > how to fix this.
> "Bus error" is a message generated by the operating system. On OS X,
> it can mean a null dereference, which is very unusual.

You did not mention whether the machine running your OS X was a PowerPC
or an "Intel" machine.

On non-x86 platforms, a bus error is usually caused by misaligned memory
accesses. Unlike the x86 which silently and expensively fixes any
misaligned accesses, sane processors kick and scream, resulting in a bus
error.

Such things tend to happen quite often when development of a software
mainly takes place on x86 family chips, and are revealed when some poor
soul on an UltraSparcIII tries to run them.

-- 
Lars Viklund | z...@acc.umu.se
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-08 Thread Chris Eidhof
On 7 feb 2010, at 19:52, Lars Viklund wrote:

> On Sun, Feb 07, 2010 at 05:12:23PM +, Ben Millwood wrote:
>>> This failed with just the text "Bus error". I searched the HTTPBis git 
>>> repository, but couldn't find the text "Bus error". I don't have a clue of 
>>> how to fix this.
>> "Bus error" is a message generated by the operating system. On OS X,
>> it can mean a null dereference, which is very unusual.
> 
> You did not mention whether the machine running your OS X was a PowerPC
> or an "Intel" machine.
> 
> On non-x86 platforms, a bus error is usually caused by misaligned memory
> accesses. Unlike the x86 which silently and expensively fixes any
> misaligned accesses, sane processors kick and scream, resulting in a bus
> error.
> 
> Such things tend to happen quite often when development of a software
> mainly takes place on x86 family chips, and are revealed when some poor
> soul on an UltraSparcIII tries to run them.

I'm on X86, Snow Leopard. I'm running GHC 6.10.2.

-chris___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-08 Thread Chris Eidhof
I should add that I was able to work around the issue by using Michael 
Snoyman's http-wget [1] package. It uses the command-line version of wget, 
which does work on my machine.

-chris

[1]: http://hackage.haskell.org/package/http-wget

On 7 feb 2010, at 16:50, Chris Eidhof wrote:

> Thanks. Unfortunately, it didn't help. The thing that frustrates me is that 
> it's quite hard to debug. I guess I'll upgrade my GHC to 6.12, hopefully 
> that'll solve it.
> 
> -chris
> 
> On 7 feb 2010, at 16:07, Yusaku Hashimoto wrote:
> 
>> Hello,
>> 
>> On Sat, Feb 6, 2010 at 2:51 AM, Chris Eidhof  wrote:
>>> Approach 3: I used the simpleHTTP function from the HTTP package. This 
>>> crashed, after I dug a little deeper into the code, it threw an error on 
>>> calling the parseURI function (openFile: no such file exists). I installed 
>>> the latest network package and upgraded my HTTP package, and the parseURI 
>>> error went away. I felt like I was almost there, and tried the following:
>>> 
 simpleHTTP (getRequest "http://haskell.org";)
>>> 
>>> This failed with just the text "Bus error". I searched the HTTPBis git 
>>> repository, but couldn't find the text "Bus error". I don't have a clue of 
>>> how to fix this.
>> 
>> Try reinstall network package with `cabal install --reinstall
>> --hsc2hs-options="--cflag=-m32 --lflag=-m32"`.
>> 
>> See also: http://hackage.haskell.org/trac/ghc/ticket/3681
>> 
>> Hope this helps.
>> --nwn
> 
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-08 Thread Yusaku Hashimoto
Try to reinstall HTTP package also. I think your HTTP package is still
linked with old broken network package.

HTTP depends on network. And network is a binding for network API of
OS. These API is for C-language. When ghc builds such binding
packages, It runs gcc for some purpose. gcc thinks you need 64bit
binary (from SL, I believe.) and works for 64bit environment. But ghc
on Mac can only build 32bit binaries. So it causes the problem.

You can check if network package was correctly built by running this.
This takes a host name, and gets the root document of the host via
HTTP using a socket. Build and try `./this_program haskell.org`

import Network.Socket
import System.IO
import System.Environment

getAddr :: HostName -> IO AddrInfo
getAddr host = head `fmap`
   (getAddrInfo (Just defaultHints { addrSocketType = Stream })
(Just host)
(Just "http"))

connected :: HostName -> IO Socket
connected host = do
addrinfo <- getAddr host
sock <- socket (addrFamily addrinfo)
   (addrSocketType addrinfo)
   (addrProtocol addrinfo)
connect sock (addrAddress addrinfo)
return sock

httpGet :: HostName -> IO String
httpGet host = do
h <- flip socketToHandle ReadWriteMode =<< connected host
hSetBuffering h NoBuffering
hPutStr h "GET / HTTP/1.0\r\n\r\n"
hGetContents h

main = fmap head getArgs >>= httpGet >>= putStr

I should have mentioned them in my last mail. Sorry.

By the way, ghc-6.12 on Mac still can not build 64bit binaries. So
upgrading ghc won't solve it.

--nwn

On Mon, Feb 8, 2010 at 12:50 AM, Chris Eidhof  wrote:
> Thanks. Unfortunately, it didn't help. The thing that frustrates me is that 
> it's quite hard to debug. I guess I'll upgrade my GHC to 6.12, hopefully 
> that'll solve it.
>
> -chris
>
> On 7 feb 2010, at 16:07, Yusaku Hashimoto wrote:
>
>> Hello,
>>
>> On Sat, Feb 6, 2010 at 2:51 AM, Chris Eidhof  wrote:
>>> Approach 3: I used the simpleHTTP function from the HTTP package. This 
>>> crashed, after I dug a little deeper into the code, it threw an error on 
>>> calling the parseURI function (openFile: no such file exists). I installed 
>>> the latest network package and upgraded my HTTP package, and the parseURI 
>>> error went away. I felt like I was almost there, and tried the following:
>>>
 simpleHTTP (getRequest "http://haskell.org";)
>>>
>>> This failed with just the text "Bus error". I searched the HTTPBis git 
>>> repository, but couldn't find the text "Bus error". I don't have a clue of 
>>> how to fix this.
>>
>> Try reinstall network package with `cabal install --reinstall
>> --hsc2hs-options="--cflag=-m32 --lflag=-m32"`.
>>
>> See also: http://hackage.haskell.org/trac/ghc/ticket/3681
>>
>> Hope this helps.
>> --nwn
>
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Two GET HTTP requests

2010-02-10 Thread Chris Eidhof
Hi nwn,

I had the following error:

Run: Network/Socket/Internal.hsc:(298,2)-(314,60): Non-exhaustive patterns in 
case. The code for those lines look like this:

> peekSockAddr p = do
>   family <- (#peek struct sockaddr, sa_family) p
>   case family :: CSaFamily of
> #if defined(DOMAIN_SOCKET_SUPPORT)
> (#const AF_UNIX) -> do
> str <- peekCString ((#ptr struct sockaddr_un, sun_path) p)
> return (SockAddrUnix str)
> #endif
> (#const AF_INET) -> do
> addr <- (#peek struct sockaddr_in, sin_addr) p
> port <- (#peek struct sockaddr_in, sin_port) p
> return (SockAddrInet (PortNum port) addr)
> #if defined(IPV6_SOCKET_SUPPORT)
> (#const AF_INET6) -> do
> port <- (#peek struct sockaddr_in6, sin6_port) p
> flow <- (#peek struct sockaddr_in6, sin6_flowinfo) p
> addr <- (#peek struct sockaddr_in6, sin6_addr) p
> scope <- (#peek struct sockaddr_in6, sin6_scope_id) p
> return (SockAddrInet6 (PortNum port) flow addr scope)
> #endif


Thanks for all your help. I'll first upgrade to a new GHC and then try again.

-chris

On 9 feb 2010, at 06:41, Yusaku Hashimoto wrote:

> Try to reinstall HTTP package also. I think your HTTP package is still
> linked with old broken network package.
> 
> HTTP depends on network. And network is a binding for network API of
> OS. These API is for C-language. When ghc builds such binding
> packages, It runs gcc for some purpose. gcc thinks you need 64bit
> binary (from SL, I believe.) and works for 64bit environment. But ghc
> on Mac can only build 32bit binaries. So it causes the problem.
> 
> You can check if network package was correctly built by running this.
> This takes a host name, and gets the root document of the host via
> HTTP using a socket. Build and try `./this_program haskell.org`
> 
> import Network.Socket
> import System.IO
> import System.Environment
> 
> getAddr :: HostName -> IO AddrInfo
> getAddr host = head `fmap`
>   (getAddrInfo (Just defaultHints { addrSocketType = Stream })
>(Just host)
>(Just "http"))
> 
> connected :: HostName -> IO Socket
> connected host = do
>addrinfo <- getAddr host
>sock <- socket (addrFamily addrinfo)
>   (addrSocketType addrinfo)
>   (addrProtocol addrinfo)
>connect sock (addrAddress addrinfo)
>return sock
> 
> httpGet :: HostName -> IO String
> httpGet host = do
>h <- flip socketToHandle ReadWriteMode =<< connected host
>hSetBuffering h NoBuffering
>hPutStr h "GET / HTTP/1.0\r\n\r\n"
>hGetContents h
> 
> main = fmap head getArgs >>= httpGet >>= putStr
> 
> I should have mentioned them in my last mail. Sorry.
> 
> By the way, ghc-6.12 on Mac still can not build 64bit binaries. So
> upgrading ghc won't solve it.
> 
> --nwn
> 
> On Mon, Feb 8, 2010 at 12:50 AM, Chris Eidhof  wrote:
>> Thanks. Unfortunately, it didn't help. The thing that frustrates me is that 
>> it's quite hard to debug. I guess I'll upgrade my GHC to 6.12, hopefully 
>> that'll solve it.
>> 
>> -chris
>> 
>> On 7 feb 2010, at 16:07, Yusaku Hashimoto wrote:
>> 
>>> Hello,
>>> 
>>> On Sat, Feb 6, 2010 at 2:51 AM, Chris Eidhof  wrote:
 Approach 3: I used the simpleHTTP function from the HTTP package. This 
 crashed, after I dug a little deeper into the code, it threw an error on 
 calling the parseURI function (openFile: no such file exists). I installed 
 the latest network package and upgraded my HTTP package, and the parseURI 
 error went away. I felt like I was almost there, and tried the following:
 
> simpleHTTP (getRequest "http://haskell.org";)
 
 This failed with just the text "Bus error". I searched the HTTPBis git 
 repository, but couldn't find the text "Bus error". I don't have a clue of 
 how to fix this.
>>> 
>>> Try reinstall network package with `cabal install --reinstall
>>> --hsc2hs-options="--cflag=-m32 --lflag=-m32"`.
>>> 
>>> See also: http://hackage.haskell.org/trac/ghc/ticket/3681
>>> 
>>> Hope this helps.
>>> --nwn
>> 
>> 

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe