2012-12-16 90 views
2

我想創建一個Request價值,正在以下錯誤:錯誤創建Haskell的HTTP請求

ghci> :m +Network.HTTP Network.URI Data.Maybe 
ghci> Request { rqURI = fromJust $ parseURI "http://www.google.com", rqMethod = GET, rqHeaders = [], rqBody = ""} 

<interactive>:18:19: 
    Couldn't match expected type `network-2.3.1.0:Network.URI.URI' 
       with actual type `URI' 
    In the `rqURI' field of a record 
    In the expression: 
     Request 
     {rqURI = fromJust $ parseURI "http://www.google.com", 
     rqMethod = GET, rqHeaders = [], rqBody = ""} 
    In an equation for `it': 
     it 
      = Request 
       {rqURI = fromJust $ parseURI "http://www.google.com", 
       rqMethod = GET, rqHeaders = [], rqBody = ""} 

cabal list network顯示以下內容:

* network 
    Synopsis: Low-level networking interface 
    Default available version: 2.4.0.1 
    Installed versions: 2.3.1.0, 2.4.0.1 
    Homepage: https://github.com/haskell/network 
    License: BSD3 

從上Hackage的文檔,我相信我用parseURI創建的URI是Network.URI.URI

我在OS X Mountain Lion上運行Haskell Platform 2012.4.0.0(64位)。

這是我聽說過的「陰謀地獄」的一個例子嗎?

回答

3

您的HTTP包使用network-2.3.1.0構建,但ghci加載最新版本的network,除非明確告知使用哪個版本。

所以parseURI返回Maybe network-2.4.0.1:Network.URI.URIRequest需要從network-2.3.1.0類型。

可以

  • 調用ghci中有-package標誌指定版本的network使用,$ ghci -package network-2.3.1.0 other arguments
  • 重建HTTP,根據其對network-2.4.0.1一切 - 在這種情況下,它可能會更好重建所有這些在傳遞上取決於network-2.3.1.0

Is this an example of "cabal hell" that I hear about?

我不會走那麼遠,稱之爲「地獄」,但,但它是一個小例子確實如此。

+0

問題似乎是hxt-9.3.1.1特別依賴於network-2.3.1.0。強制重新安裝網絡將會破壞HXT。 – Ralph

+0

在這種情況下,'-package'標誌就是要走的路。這是不方便的,但它有效。 –

+0

我實際上得到了編譯應用程序時的原始錯誤(實際上運行'runhaskell')。我將相關部分複製到GHCi進一步測試,並從中編寫我的SOF問題。猜猜我不走運。 – Ralph