4

我知道这似乎与Could not find module `Yesod'重复,但与那个用户不同,ghc-pkg list它没有显示Yesod在我的计算机上的输出中,他们似乎没有使用stack(我是,我不确定是否意味着我不需要担心ghc-pkg list),此外,该问题的答案(代码)对我的情况没有帮助。

Yesod Book有一个例子,我已经尝试了几个小时开始工作。我会在这里转载

{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE QuasiQuotes           #-}
{-# LANGUAGE TemplateHaskell       #-}
{-# LANGUAGE TypeFamilies          #-}
import           Yesod

data HelloWorld = HelloWorld

mkYesod "HelloWorld" [parseRoutes|
/ HomeR GET
|]

instance Yesod HelloWorld

getHomeR :: Handler Html
getHomeR = defaultLayout [whamlet|Hello World!|]

main :: IO ()
main = warp 3000 HelloWorld

我正在使用最新的 64 位 Ubuntu 操作系统。我一直遇到的问题是runhaskell hello-world.hs会一次又一次地返回

hello-world.hs:6:18:
    Could not find module `Yesod'
    Use -v to see a list of the files searched for.

同样,当我module向文件添加名称并尝试使用stack ghci hello-world.hs. 我stack用来构建东西,我已经尝试了许多不同的迭代stack new(使用 yesod 模板)、stack initstack build's left 和 right、stack update's here and there's here and there for good measure,甚至一些cabal install's,以及Yesod 快速入门指南的全部内容,都无济于事,并且都在正确的目录中。

当我将 Yesod 模板与 一起使用时simpleSQL,模板站点会正确加载,而且我正在使用的一个更大的项目Snowdrift也可以运行(尽管作为站点,使用stack exec yesod devel而不是runhaskell FILE命令;但它仍然有效,并且我已经尝试过完全相同的构建过程来处理hello-world.hs上面的文件。

我觉得这个问题有一个我想念的简单解决方案,但我已经尝试过,到处搜索,我只是没有找到答案。

非常感谢您花时间帮助我。

4

2 回答 2

6

runhaskell hello-world.hs并且ghc-pkg list将默认使用全局系统和用户包数据库(即 cabal-instal 通常使用的那些),而不是堆栈使用的快照和项目特定的数据库(另请参阅:为什么不堆栈将包添加到ghc 包数据库?)。您应该改用stack runghc hello-world.hsand stack exec -- ghc-pkg list。stack 命令确保 GHC 工具使用适当的包数据库(以及适当版本的 GHC,以防您需要stack setup使用与系统范围内安装的 GHC 不同的 GHC)。

于 2015-08-25T11:28:20.943 回答
1

您的结果可能会有所不同,但这对我有用(2018 年 1 月 13 日):

  • Mac OS 10.13.2 (High Sierra)
  • 在 Hackage 中搜索 Yesod,在https://hackage.haskell.org/package/yesod-1.4.5/docs/Yesod.html找到 1.4.5
  • 堆栈安装 yesod-1.4.5
  • 出现依赖错误,建议将管道额外 1.1.13.1 添加到额外的deps(在 ~/.stack/global/stack.yaml 中)。
  • 再试一次;得到了更多的依赖错误,结果是我最终得到:
  • extra-deps: ["gtk-mac-integration-0.3.4.0","conduit-extra-1.2.3.2","conduit-1.2.13","streaming-commons-0.1.18","typed-process- 0.2.1.0","unliftio-core-0.1.1.0"] (您可能会得到不同的建议;我只是按照我得到的建议进行的。注意:在开始之前我已经有了 gtk-mac-integration extra-dep)。
  • 成功堆栈安装 yesod-1.4.5
  • 堆栈 runghc helloworld.hs
  • 成功!

事后看来,很明显模块“Yesod”不会被发现,因为它还没有安装。我通常在堆栈创建的 Haskell 项目中工作,在这种情况下,我会采取通常的步骤来确保存在依赖关系。我通常不使用“stack runghc”运行应用程序。

于 2018-01-14T00:10:38.837 回答