F#有Pursuit或Hoogle吗?

6
最近我看到一些代码(具体来说是Fake)使用了一个没有定义的函数@@,推测它存在于F#标准库中或者.NET的其他地方。我该如何在线搜索这种类型?是否有类似于pursuithoogle的数据库可以使用?
这个问题更关注如何找到特定函数,顺带提到了替代方案。有两个非常好的答案,而答案和评论的性质是非常不同的。

@Mankarse:那个特定的函数不存在,也没有回答问题。 - Arafangion
2
据我所知,F#尚未像Pursuit或Hoogle那样拥有任何东西。 一些人已经在讨论类似的东西(例如,请参见https://github.com/fsharp/FAKE/issues/1485上的讨论),但是还没有人做到这一点。 如果/当它最终发生时,这将是一个重大改进,没有技术原因不能发生,只是很多人(像我一样)想看到它发生,但缺乏时间。 - rmunn
2
可能是https://dev59.com/-3E95IYBdhLWcg3wkeuq?rq=1的重复问题。 - Arafangion
@TheQuickBrownFox: 我觉得在.fsx文件中也没有用处,除非我弄错了? - Arafangion
1
只要依赖关系正确,这也适用于FSX文件。它们与FS一样具有静态类型。 - TheQuickBrownFox
显示剩余4条评论
2个回答

6

有一个FSDN,可以在mscorlib、一些System.* dlls和一些库(包括FAKE)中进行类似于Hoogle的搜索。

更新 2022-06-11: FSDN似乎已经离线了,我不知道有没有替代方案。


这个答案解决了我的问题,尤其是关于rmunn链接的FAKE #1485。加上rmunn的评论,实际上并没有类似pursuit或hoogle的东西。FSDN本身似乎是我们今天最接近的东西。 - Arafangion
1
截至2017年5月17日19:00 JST,FSDN已经添加了FAKE APIs支持(感谢FSDN的伙计们!)。因此,请在目标程序集菜单中检查“FAKE.Lib”项目(页面右侧),输入“(@@):_”,然后您将获得“@@”函数的签名。 - yukitos

6

这个定义位于Fake.EnvironmentHelper模块下(源代码):

let inline (@@) path1 path2 = combinePaths path1 path2

这里的combinePaths是基于BCL的Path.Combine进行柯里化处理后得到的结果,同时在path2中删除了前导路径分隔符(来源):

let inline combinePaths path1 (path2 : string) = 
    Path.Combine(path1, path2.TrimStart [| '\\'; '/' |])

请注意,Fake.EnvironmentHelper模块已应用AutoOpenAttribute。引用此@@运算符的其他模块无需显式open Fake.EnvironmentHelper模块。

这就解释了!特别是对于AutoOpenAttribute属性。但是,如果您认为@@是一个示例,那么F#是否有类似于pursuit或hoogle等的等效功能呢? - Arafangion
MSDN相对于Hoogle或Pursuit来说是一个相当糟糕的搜索引擎,但如果这就是我们所拥有的,那就只能将就着用(直到有人修复它)。我会接受您的答案作为结果 - 谢谢。 - Arafangion
我对Haskell的经验不多,所以无法进行比较。但是,我非常喜欢MSDN的一点是他们为几乎所有库函数提供示例,这非常有用,特别是对于函数式编程的新手来说。 - rexcfnghk
Hoogle最棒的一点,就是你可以按照通用类型进行搜索。例如(a -> b) -> [a] -> [b],这是map。 这是确定“有人实现过吗?”的好方法,并且最关键的是,还可以搜索像https://www.haskell.org/hoogle/?hoogle=%3E%3D%3E这样奇怪的符号。 - Arafangion
在 F# 中,基于类型签名的搜索不如 Haskell 有用,因为 F# 不是纯函数式的(存在许多可能具有不同副作用的 'a -> 'a 实现),也不够通用。这可能是为什么没有投入更多精力的原因。 - TheQuickBrownFox
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接