Haskell Yesod的资源来自哪里?

Haskell Yesod的资源来自哪里?,haskell,yesod,Haskell,Yesod,Yesod框架中的两个函数mkYesodData和mkYesodDispatch应该将处理程序定义和调度过程分开。尽管(对我来说)奇迹般地,模板使用了这个有趣的函数“resourcesApp”: 我在hoogle中唯一提到的这个函数就是Hledger包。而且这不是一种依赖 在哈斯凯尔学派,通过这个链接,他们解释说resourcesApp是由mkYesodData“生成”的,尽管它对我来说仍然不起作用。 有人知道这一点的解释吗?提前谢谢你。Yesod的引擎盖下有一些Haskell(TH)的模板,

Yesod框架中的两个函数mkYesodData和mkYesodDispatch应该将处理程序定义和调度过程分开。尽管(对我来说)奇迹般地,模板使用了这个有趣的函数“resourcesApp”:

我在hoogle中唯一提到的这个函数就是Hledger包。而且这不是一种依赖

在哈斯凯尔学派,通过这个链接,他们解释说resourcesApp是由mkYesodData“生成”的,尽管它对我来说仍然不起作用。


有人知道这一点的解释吗?提前谢谢你。

Yesod的引擎盖下有一些Haskell(TH)的模板,我想这是让你困惑的地方。在文档中搜索时,模板Haskell可能会令人困惑,因为它在编译时生成的值在运行时使用,而在编译代码之前不存在这些值<代码>资源p只是这些值之一

在您引用的代码中,作者描述了您必须有另一个模块(他称之为
Foundation
),您在其中调用了
mkYesodData
。实际上,如果没有这个其他模块,
Dispatch
模块中的代码将无法工作。奇怪的是,直到(第四部分)[https://www.schoolofhaskell.com/school/advanced-haskell/building-a-file-hosting-service-in-yesod/part%204]他似乎定义了
Foundation
模块,但您可以看到有一行:

mkYesodData“App”$(解析路由文件“config/routes”)
这看起来可能不像它定义了一个名为
resourcesApp
的值,但确实如此

简而言之,您应该能够通过完成整个教程并完全运行代码来让代码正常工作


如果您赢了,对
mkYesodData
的调用将获取一个
字符串
,然后按字面意思生成一个代码,该代码定义了一个值name
resources***
,其中
***
就是您传递的字符串。在本例中,这将是一个值
resourcesApp
,但在其他人的YesSOD项目中,它可能是
resourcesfo
。此外,由于该
resourcesfo
值不在代码中,因此使用YesSOD的项目通常不会在其导出列表或haddock文档中显示。实际上非常奇怪的是,你甚至在hoogle上发现了
resourcesApp
的一个点击率,但仔细检查,这有点道理:Hledger似乎是YesSOD周围的某种扩展接口,所以他们预先生成了TH值,以便用户可以轻松访问


另一方面,TH在使用上有一些限制。首先,您通常需要在使用生成值的模块之外的单独模块中执行TH调用(通常称为“拼接”)。这可能就是为什么作者让你创建一个单独的
Foundation
模块,而不是把行
mkYesodData…
放在
Dispatch
模块中。

在Yesod的引擎盖下有一些模板Haskell(TH),我想这是让你困惑的地方。在文档中搜索时,模板Haskell可能会令人困惑,因为它在编译时生成的值在运行时使用,而在编译代码之前不存在这些值<代码>资源p只是这些值之一

在您引用的代码中,作者描述了您必须有另一个模块(他称之为
Foundation
),您在其中调用了
mkYesodData
。实际上,如果没有这个其他模块,
Dispatch
模块中的代码将无法工作。奇怪的是,直到(第四部分)[https://www.schoolofhaskell.com/school/advanced-haskell/building-a-file-hosting-service-in-yesod/part%204]他似乎定义了
Foundation
模块,但您可以看到有一行:

mkYesodData“App”$(解析路由文件“config/routes”)
这看起来可能不像它定义了一个名为
resourcesApp
的值,但确实如此

简而言之,您应该能够通过完成整个教程并完全运行代码来让代码正常工作


如果您赢了,对
mkYesodData
的调用将获取一个
字符串
,然后按字面意思生成一个代码,该代码定义了一个值name
resources***
,其中
***
就是您传递的字符串。在本例中,这将是一个值
resourcesApp
,但在其他人的YesSOD项目中,它可能是
resourcesfo
。此外,由于该
resourcesfo
值不在代码中,因此使用YesSOD的项目通常不会在其导出列表或haddock文档中显示。实际上非常奇怪的是,你甚至在hoogle上发现了
resourcesApp
的一个点击率,但仔细检查,这有点道理:Hledger似乎是YesSOD周围的某种扩展接口,所以他们预先生成了TH值,以便用户可以轻松访问


另一方面,TH在使用上有一些限制。首先,您通常需要在使用生成值的模块之外的单独模块中执行TH调用(通常称为“拼接”)。这可能就是为什么作者让您创建一个单独的
Foundation
模块,而不是将行
mkYesodData…
放在
Dispatch
模块中的原因。

您能否提供更多的上下文,例如,您正在谈论的庙宇?也许可以添加一些文档/代码的链接?只是添加了一个Haskell学派的链接。这个问题需要一个最小的复制示例,以及您得到的确切错误。您能否提供更多的上下文,例如,您正在谈论的庙宇?可能会添加一些文档/代码的链接?只是添加了一个指向
mkYesodDispatch "App" resourcesApp