Haskell 更改文件后自动重新启动快照服务器

Haskell 更改文件后自动重新启动快照服务器,haskell,haskell-snap-framework,Haskell,Haskell Snap Framework,我已经开始学习一些关于snap框架的知识,我找到了一些关于blaze snap的教程,并想构建一个小的web应用程序 更改html部分中的代码时,最烦人的事情是我必须 Ctrl+C现有的Snap服务器,然后cabal run重新启动它有更简单的方法吗。 我发现了下面的util,它允许在某个文件被更改后运行命令——这肯定很有用,但我不知道如何在这种情况下应用它 获取一个最简单的工作示例-使用snap init barebone命令并将src/Main.hs替换为 {-# LANGUAGE Over

我已经开始学习一些关于snap框架的知识,我找到了一些关于blaze snap的教程,并想构建一个小的web应用程序

更改html部分中的代码时,最烦人的事情是我必须
Ctrl+C
现有的Snap服务器,然后
cabal run
重新启动它有更简单的方法吗。

我发现了下面的util,它允许在某个文件被更改后运行命令——这肯定很有用,但我不知道如何在这种情况下应用它

获取一个最简单的工作示例-使用
snap init barebone
命令并将
src/Main.hs
替换为

{-# LANGUAGE OverloadedStrings #-}
module Main where

import           Control.Monad (forM_)
import           Control.Applicative ((<|>))
import           Snap.Core
import           Snap.Util.FileServe
import           Snap.Http.Server
import           Snap.Blaze (blaze)
import qualified Data.Text as T
import qualified Text.Blaze.Html5 as H

main :: IO ()
main = quickHttpServe site

site :: Snap ()
site =
    ifTop testHandler <|>
    dir "static" (serveDirectory ".")

testHandler :: Snap ()
testHandler = blaze $ H.docTypeHtml $
    do H.head $ H.title "SnaptestBlaze"
       H.body $ do H.p "Blaze makes Html"
                   H.ul $ forM_ [1..10::Int] (H.li . H.toHtml)
{-#语言重载字符串}
模块主要在哪里
导入控制.Monad(表单)
导入控件。应用程序(())
导入Snap.Core
导入Snap.Util.FileServe
导入Snap.Http.Server
导入快照.Blaze(Blaze)
导入符合条件的数据。文本为T
将限定的Text.Blaze.Html5作为H导入
main::IO()
main=quickHttpServe站点
站点::快照()
场地=
ifTop测试处理器
目录“static”(serveDirectory.)
testHandler::Snap()
testHandler=blaze$H.docTypeHtml$
do H.head$H.title“SnaptestBlaze”
H.body$do H.p“Blaze生成Html”
H.ul$forM_uu[1..10::Int](H.li.H.toHtml)
并确保在相应的
*.cabal
文件中有
snap blaze
blaze html

我还看到有一个包
snap loader dynamic
,听起来很有希望,但我无法为所需的依赖项构建应用程序,而且cabal沙箱中的依赖项具有不同的散列值

我看到存在
stack
最终替换
cabal
,但我没有足够的时间检查
stack
是否可以自动重建和重新启动


如果我正在开发的环境是相关的:Linux(Mint)+cabal sandbox。

Snap本身就内置了此功能。假设您使用
snap init
初始化了项目,只需通过

cabal install -fdevelopment

它将根据需要在飞行中重新加载自身。

Snap本身内置了此功能。假设您使用
snap init
初始化了项目,只需通过

cabal install -fdevelopment

它会根据需要在飞行中重新加载自己。

丹尼尔的答案肯定是正确的。但是,如果您想要不涉及代码更改的重新加载,也可以这样做。请参见示例。

丹尼尔的答案肯定是正确的。但是,如果您想要不涉及代码更改的重新加载,也可以这样做。请参阅示例。

再次检查:
阴谋集团安装-fdevelopment
,如中所述,是否适用于您?稍后,我将不得不尝试我不知道为什么要构建它-但正如我所写,我尝试使用snap loader dynamic,但我尝试从新构建的应用程序中修改Site.hs,并且还修改了login.tpl(只是添加了一个词)但它没有重新编译。-为了不确定我会是个傻瓜-我用chrome打开了这个网站-然后它重新编译-懒散-再次咬了我一口只有当网站被请求时才会重新编译!-谢谢!你能给我一个答案吗?我愿意接受!只是再检查一下:
cabal安装-fdevelopment
,如中所建议的那样,对你有用吗?有一刻我不得不尝试我不知道它为什么在构建-但在我写的时候,我尝试使用snap-loader动态,尽管如此,我还是尝试从新构建的应用程序中修改Site.hs,我还修改了login.tpl(只添加了一个单词),但它没有重新编译。-为了不确定我会是个傻瓜-我用chrome打开了该网站-然后它重新编译-懒散-再次咬了我一口只有当网站被请求时才会重新编译!-谢谢!你能给你的评论一个答案吗-我愿意接受它!也看到这个。也看到这个。谢谢-我一定会关注这篇博客文章!谢谢-我一定会关注这篇博客文章!