>>= 运算符不带函数吗?
Does the >>= operator not take a function?
我正在做一个业余项目,这是我第一次使用 Hopac。我 运行 遇到了一个奇怪的(对我来说)编译问题,我一直无法理解。我怀疑我是这里的问题,而不是 Hopac。
该程序应该是一个简单的控制台应用程序,它使用来自各种服务的通知。这是有问题的模块:
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
在这种情况下,编译器会报错:Expecting a type supporting the operator '>>=' but given a function type. You may be missing an argument to a function.
同样,如果我使用稍微不同的语法:
// ...
let rec server =
let latest = providerImpl.GetLatestNotificationsAsync(None) |> Job.fromAsync
latest >>= fun l -> Ch.give p.getCh l // error here
// ...
在这种情况下,错误是:This function takes too many arguments, or is used in a context where a function is not expected.
我问了 haf 关于他的 in slack,他的建议是检查 >>=
的替代定义。该工具并没有真正帮助我解决这个问题,但我打开的唯一定义 >>=
的 namespace/module 是 Hopac
(BitThicket
只是带有一些类型定义的简单命名空间。
我做错了什么?
我正在查看源代码,我发现绑定运算符实际上是在 Hopac.Infixes
中定义的,而不是在 Hopac
.
中
我正在做一个业余项目,这是我第一次使用 Hopac。我 运行 遇到了一个奇怪的(对我来说)编译问题,我一直无法理解。我怀疑我是这里的问题,而不是 Hopac。
该程序应该是一个简单的控制台应用程序,它使用来自各种服务的通知。这是有问题的模块:
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
在这种情况下,编译器会报错:Expecting a type supporting the operator '>>=' but given a function type. You may be missing an argument to a function.
同样,如果我使用稍微不同的语法:
// ...
let rec server =
let latest = providerImpl.GetLatestNotificationsAsync(None) |> Job.fromAsync
latest >>= fun l -> Ch.give p.getCh l // error here
// ...
在这种情况下,错误是:This function takes too many arguments, or is used in a context where a function is not expected.
我问了 haf 关于他的 in slack,他的建议是检查 >>=
的替代定义。该工具并没有真正帮助我解决这个问题,但我打开的唯一定义 >>=
的 namespace/module 是 Hopac
(BitThicket
只是带有一些类型定义的简单命名空间。
我做错了什么?
我正在查看源代码,我发现绑定运算符实际上是在 Hopac.Infixes
中定义的,而不是在 Hopac
.