jsaddle-dom import error suggests add dependency 我已经添加了

jsaddle-dom import error suggests adding dependency I've already added

尝试编译基于 ghcjs/jsaddle 的 Haskell 网站时,我得到

Main.hs:20:1: error:
    Failed to load interface for ‘GHCJS.DOM.Element’
    It is a member of the hidden package ‘jsaddle-dom-0.9.2.0’.
    Perhaps you need to add ‘jsaddle-dom’ to the build-depends in your .cabal file.
    Use -v to see a list of the files searched for.

尽管 jsaddle-dom 已经在我的 cabal 文件的 build-depends 中。

所以我无法按照错误消息的提示进行操作。

怎么回事?

你应该在你的 cabal 文件中放置 build-depends: ghcjs-dom 而不是 build-depends: jsaddle-dom

这是因为 ghcjs-dom 是真正的 ghcjs-dom-jsffijsaddle-dom 之间的多路复用器。

查看 ghcjs-dom cabal 文件以了解这一点。

为什么 ghc 的错误信息如此具有误导性?感谢来自 #reflex-frp freenode IRC 频道的 jonored 的解释:

ghcjs-dom is just a reference to the module in jsaddle on that platform. so it's not where it actually canonically is, and ghc tells you about where it is. But you want ghcjs-dom, so that it tells you the ghcjs-based implementation on ghcjs.