当我尝试运行 Yesod 书中的第一个示例时出现“找不到模块 `Yesod'”

Nic*_*año 4 haskell yesod haskell-stack

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

耶索德书有一个例子,我一直试图去工作了好几个小时了。我会在这里重印

{-# 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
Run Code Online (Sandbox Code Playgroud)

我使用的是最新的 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.
Run Code Online (Sandbox Code Playgroud)

同样,当我module向文件添加名称并尝试使用stack ghci hello-world.hs. 我使用的是stack要构建的东西,我尝试了许多不同的迭代stack new(与耶索德模板),stack initstack build的左,右,用stack update的在这里和那里的好办法,甚至少数cabal install的,随着Yesod 快速入门指南的全部内容都无济于事,并且都在正确的目录中。

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

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

感谢一群人抽出时间来帮助我。

dup*_*ode 6

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