当我尝试 运行 Yesod 书中的第一个示例时得到 "Could not find module `Yesod'"

Getting "Could not find module `Yesod'" when I try to run first example from Yesod book

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

Yesod Book 有一个 example 我已经花了好几个小时开始工作了。我会在这里转载

{-# 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 OS。我一直 运行 遇到的问题是 runhaskell hello-world.hs 会一次又一次 return

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 的左右迭代,到处都是 stack update,甚至有几个 cabal install,连同整个 the Yesod quickstart guide,都无济于事,而且都在正确的目录中.

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

我觉得这个问题有一个我所缺少的简单解决方案,但我试了又试,到处搜索,就是没有找到答案。

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

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

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

  • Mac OS 10.13.2(高山脉)
  • 搜索 Yesod 的 Hackage,在 https://hackage.haskell.org/package/yesod-1.4.5/docs/Yesod.html
  • 找到 1.4.5
  • 堆栈安装 yesod-1.4.5
  • 出现依赖错误,建议将 conduit-extra-1.1.13.1 添加到 extra-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
  • 堆栈运行ghchelloworld.hs
  • 成功!

事后看来,很明显模块 "Yesod" 不会被发现,因为它尚未安装。我通常在堆栈创建的 Haskell 项目中工作,在这种情况下,我会采取通常的步骤来确保存在依赖关系。我通常不会 运行 申请 "stack runghc".