F# 是否>>;=操作员不执行功能?
我正在做一个辅助项目,我第一次使用Hopac。我(对我来说)遇到了一个奇怪的编译问题,我一直无法解决。我怀疑这里的问题是我,而不是霍帕克 该程序应该是一个简单的控制台应用程序,使用来自各种服务的通知。下面是有问题的模块:F# 是否>>;=操作员不执行功能?,f#,hopac,F#,Hopac,我正在做一个辅助项目,我第一次使用Hopac。我(对我来说)遇到了一个奇怪的编译问题,我一直无法解决。我怀疑这里的问题是我,而不是霍帕克 该程序应该是一个简单的控制台应用程序,使用来自各种服务的通知。下面是有问题的模块: module Provider open System open System.IO open Hopac open BitThicket.NotificationHelper.Core open BitThicket.NotificationHelper.Providers
module Provider
open System
open System.IO
open Hopac
open BitThicket.NotificationHelper.Core
open BitThicket.NotificationHelper.Providers
let defaultProviderTypes =
[| typeof<GitHub.GitHubNotificationProvider> |]
type Provider = {
getCh : Ch<Providers.INotification seq>
}
let giveLatest ch latest =
Ch.give
let start config logger (providerType:Type) = Job.delay <| fun () ->
let providerImpl = Activator.CreateInstance(providerType) :?> Providers.INotificationProvider
let p = { getCh = Ch() }
let rec server =
let latest = providerImpl.GetLatestNotificationsAsync(None) |> Job.fromAsync
latest >>= Ch.give p.getCh // error here
}
Job.start server
在这种情况下,错误是:此函数接受的参数太多,或者在不需要函数的上下文中使用。
我向哈夫询问了他的空闲时间,他的建议是检查>=
的替代定义。该工具实际上并没有帮我解决这个问题,但我打开的唯一定义>=
的名称空间/模块是Hopac
(bitcheet
的名称空间非常简单,其中包含一些类型定义)
我做错了什么?我在看源代码,我看到绑定运算符实际上是在中定义的,而不是在
Hopac我在看源代码,我看到绑定运算符实际上是在中定义的,而不是在Hopac
中定义的。哦,天哪。我只是假设它是自动打开的,但你完全正确。谢谢我建议将您的评论移动到一个答案,这样您就可以找到一些虚假的互联网点!:-)好的,完成,转换为答案。
// ...
let rec server =
let latest = providerImpl.GetLatestNotificationsAsync(None) |> Job.fromAsync
latest >>= fun l -> Ch.give p.getCh l // error here
// ...