当我尝试 运行 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 init
和 stack 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.hs
和 ghc-pkg list
将默认使用全局系统和用户包数据库(即 cabal-instal 通常使用的数据库),而不是使用快照和项目特定的数据库按堆栈(另请参阅:)。您应该改为使用 stack runghc hello-world.hs
和 stack 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".
我知道这似乎与 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 init
和 stack 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.hs
和 ghc-pkg list
将默认使用全局系统和用户包数据库(即 cabal-instal 通常使用的数据库),而不是使用快照和项目特定的数据库按堆栈(另请参阅:stack runghc hello-world.hs
和 stack 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".