gpt4 book ai didi

haskell - 如何处理像 Yesod 这样的 Haskell 框架中的类型

转载 作者:行者123 更新时间:2023-12-04 02:48:30 25 4
gpt4 key购买 nike

我对 Haskell 比较陌生,并试图通过使用 Yesod 框架构建网站来获得一些经验。我现在面临的最大困难是我经常不确定一个函数需要什么类型或者另一个函数返回什么类型。我也无法解释我犯错时产生的类型错误。

特别是,我希望能够做以下事情,但我目前不知道做这些事情的好方法。

  • 给定一个表达式,找出表达式的类型。通常我会使用 GHCi 来做这样的事情,但据我所知,如果我想这样做,我需要知道表达式的每个部分来自哪个包,但我不知道该怎么做。我还希望能够检查从模板 Haskell 生成的函数类型,例如 HomeR。有没有一种方法可以使用 GHCi 检查出现在 Yesod 项目的 .hs 文件中的任意表达式的类型或对其求值?
  • 按照与上面相同的思路,给定一个出现在 Yesod 项目的某些 .hs 文件中的类型或类,得到它的定义?
  • 给定一个 Yesod 函数或类型,快速找到它的文档。我目前所做的是在 Google 上搜索给定的函数,但这有点烦人,因为第一个结果并不总是文档,有时是旧版本。有没有一种快速查找 Yesod 文档的有效方法?

最佳答案

您问了几个问题,所以我会尝试分别回答每个问题:

(1) 查找表达式的类型

你不需要知道包名,只需要知道模块名。如果您只使用 Yesod 函数,在 GHCi 提示符下 import Yesod 将导入它的大部分函数。除此之外,您必须使用 (3) 来查找和导入表达式的所有必要模块。

(2)获取项目中定义的symbol的定义

如果你使用像vim或emacs这样的编辑器,你可以为你的项目生成标签,然后根据标签使用编辑器的跳转到定义功能。要从 GHCi 为所有加载的模块生成标签,您可以使用以下命令之一

:ctags  -- ctags for vim
:etags -- etags for emacs

如果要为整个项目生成标签,可以使用标签生成器,例如hasktags。 .还有一个Haskell Wiki Page对这个。

如果你在 GHCi 中加载了带有定义的模块,你也可以使用 :i 符号来找到它的定义位置:

Prelude> :i maybe
maybe :: b -> (a -> b) -> Maybe a -> b -- Defined in `Data.Maybe'

(3) 查找在 hackage 包中定义的符号的文档

您可以使用 Hayoo .它索引了大部分 hackage,我还没有找到任何它还没有索引的包(除了 GHC API 文档,但那不是 hackage)。或者,有 Hoogle它也能够搜索给定类型签名的函数,但它不会索引所有黑客攻击。特别是,Yesod 似乎不在其索引中。

关于haskell - 如何处理像 Yesod 这样的 Haskell 框架中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18308018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com