2012-06-01 75 views
2

我想要得到一些在ghc 7.0.4中工作的代碼與7.4.1一起工作。Snap Monad,LiftIO和ghc 7.4.1

在我看來,從Snap模塊訪問IO的舊方式不再受到類型檢測。

在ghc 7.0.4中,訪問IO編譯的文檔化方式。

a :: Snap() 
a = liftIO fireTheMissiles 

http://hackage.haskell.org/packages/archive/snap-core/0.8.1/doc/html/Snap-Core.html

在GHC 7.4.1,

No instance for (MonadIO Snap) 
    arising from a use of `liftIO' 
Possible fix: add an instance declaration for (MonadIO Snap) 

我很好奇,周圍會是怎樣一個有吸引力的工作。

+1

GHC版本不應該影響這一點。你能比較7.0版安裝和7.4安裝之間的庫版本嗎?試試'ghc-pkg-7.0.4 list snap-core'和'ghc-pkg-7.4.1 list snap-core'。 –

+1

這很奇怪。所有類似Snap處理程序的類型肯定有MonadIO實例。這包括Snap,Handler和Initializer(即使最後一個不是處理程序類型)。你可以將代碼粘貼到某個地方,以便我們可以嘗試並運行它? – ozataman

+0

@DanielWagner GHC-PKG-7.0.4列表管理單元,核心 /usr/local/lib/ghc-7.0.4/package.conf.d /home/zaki/.ghc/x86_64-linux-7.0。 4/package.conf.d 卡核心0.8.1 GHC-PKG列表管理單元核心 /usr/local/lib/ghc-7.4.1/package.conf.d /家庭/崎/ .ghc/x86_64-linux-7.4.1/package.conf.d snap-core-0.8.1 – zmanian

回答

6

我的猜測是你有一些包的衝突版本(可能transformers)。當您嘗試使用0.3版本時,Snap可能是針對不同版本(可能爲0.2.2)構建的。因此,您沒有範圍內的MonadIO實例(從0.3開始)。這只是一個猜測,但我已經看到相同的事情發生了很多次。

避免這種情況的最簡單方法之一就是將代碼封裝起來。如果您嘗試使用相同軟件包的不同版本,cabal會警告您。