簡體   English   中英

構建 Spock 教程示例失敗

[英]Building the Spock tutorial example fails

我想稍微了解一下 Haskell,因此看了一下 Spock 框架。 首先,我從我的 Arch Linux 機器上卸載了 Haskell 相關的所有內容,並使用各自網站上的安裝腳本安裝了 ghcup、Cabal 和 Stack。

現在我想按照Spock 的教程 嘗試按照建議使用cabal install Spock Spock 全局安裝 Spock 會給我一個錯誤(縮寫):

src/Web/Spock/Internal/Wire.hs:43:1: error:
    Could not find module ‘Web.Routing.AbstractRouter’
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
   |
43 | import Web.Routing.AbstractRouter
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cabal: Failed to build Spock-0.9.0.1. See the build log above for details.

我已經在reddit 上找到了關於該主題的問題,但該解決方案不適用,因為我沒有嘗試使用隱含的特定版本的庫。

所以我嘗試跟隨並僅在本地構建。 但是當我到達它說stack build --fast --pedantic的地步時,無法構建構建計划並且 Stack 建議添加另一個依賴項stm-containers 這樣做,我收到了關於focusprimitive的兩個額外建議。 當我添加這些時,計划再次失敗,這次沒有簡單的解決方案:

In the dependencies for primitive-0.6.4.0:
    base-4.13.0.0 from stack configuration does not match >=4.5 && <4.13  (latest matching version is 4.12.0.0)
needed due to Spock-example-0.1.0.0 -> primitive-0.6.4.0

我可以用 Haskell 做一些小事,但是有了構建系統,我已經走出了自己的舒適區。 幫助和提示表示贊賞。 哦,當然,所有版本都是本文發布時的最新版本。

由於依賴版本不兼容, Spock不會使用 GHC 8.8 及更高版本構建。 Spock issue #149中描述了一個類似的問題,盡管我不完全確定它是完全相同的不兼容性。 您從 Stack 得到的錯誤暗示了這一點,因為base-4.13.0.0是與 GHC 8.8 捆綁在一起的base版本。 cabal-install 以更模糊的方式失敗,因為在注意到不兼容后,它嘗試使用舊版本的Spock解決依賴關系,最終選擇 0.9.0.1,嘗試並且由於缺少重新路由依賴關系的版本上限,失敗建造它。

(發布此答案后不久,缺少的上限被改裝為舊的Spock版本,因此現在嘗試重現該問題將導致更容易理解的失敗。)

拋開教程不談,考慮到這些復雜性,使用 Spock 的最直接方法可能是通過 cabal-install 3+。 首先使用 ghcup 切換到 GHC 8.6.5:

$ ghcup install 8.6.5
$ ghcup set 8.6.5

然后,使用 cabal-install 創建一個空白項目:

$ mkdir myproject
$ cd myproject
$ cabal init

Spock添加到myproject.cabalbuild-depends部分:

  build-depends:       base >=4.12 && <4.13
                     , Spock == 0.13.*

最后,您可以運行:

$ cabal build

它將在構建項目之前安裝Spock及其依賴項。 (請注意,您通常不需要使用cabal install來安裝帶有 cabal-install 3 的庫。)

通過更改為lts-14.27解析器(使用 GHC 8.6.5 的最新解析器),跟蹤所有需要覆蓋的依賴版本(正如您已經開始做的那樣),它可能也可以與 Stack 一起使用) 並手動將它們添加到stack.yamlextra-deps中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM