【发布时间】:2021-02-22 06:10:51
【问题描述】:
一些背景知识导致了我的问题。
我正在学习 Yesod,我正在阅读 Yesod 书。在Basics section of the book 中,给出了如何获取基本 Yesod 应用程序的说明。说明基本上说把它放在一个文件中:
{-# 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
并使用runhaskell helloworld.hs 或stack runghc helloworld.hs 运行它。我确实做到了这一点,但没有奏效。我收到关于找不到yesod 的错误。显然,我应该在此之前运行一个步骤,这在基本部分中没有提到。我在此处的快速入门指南中找到了该步骤https://www.yesodweb.com/page/quickstart
里面的说明基本上是说
- 安装堆栈
- 创建一个新的脚手架站点:stack new my-project yesodweb/sqlite && cd my-project
- 安装yesod命令行工具:stack install yesod-bin --install-ghc
- 构建库:堆栈构建
- 启动开发服务器:stack exec -- yesod devel
- 在 http://localhost:3000/ 上查看您的 Yesod 站点
我遵循了所有这些,它似乎工作,但现在回到基本部分中运行helloworld.hs 文件。我在上面了解到命令stack install yesod-bin --install-ghc 安装了yesod。所以我认为这可以解决Yesod not found 的问题。我回到了拥有 helloworld.hs 文件的目录并运行了 stack runghc helloworld.hs,但这不起作用。
仅当我将 helloworld.hs 移动到我按照快速入门指南创建的 my-project 项目中时,它才有效。所以我现在的问题是,命令stack runghc helloworld.hs 到底是什么,为什么该命令仅在堆栈项目中有helloworld.hs 文件时才有效?
【问题讨论】:
标签: haskell yesod haskell-stack