找不到F#Async.Map

时间:2015-02-28 03:41:13

标签: f# onvif

我有来自http://sourceforge.net/p/onvifdm/code/HEAD/tree/

的来源

当我尝试构建此解决方案时,我在onvif.utils项目中遇到以下问题。

use! response = request.AsyncGetResponse() |> Async.Map(fun x-> x:?>HttpWebResponse)

Error: Method or object constructor 'Map' not found
D:\Working\onvifdm\onvifdm-code-96-trunk\onvif\onvif.utils\OdmSession.fs

3 个答案:

答案 0 :(得分:1)

您可以使用以下代码作为替代:

let! webResponse = request.AsyncGetResponse()
use response = webResponse:?>HttpWebResponse

此外,您可以将自己的扩展名编写为异步类型 - 这里有example如何完成。您只需要为上面的代码实现高阶函数。

答案 1 :(得分:0)

对于那些仍在寻找答案的人来说,问题是Async引用了错误的类。将其更改为Microsoft.FSharp.Control.Async,问题应该解决。

答案 2 :(得分:0)

这是一个扩展Async的功能,该功能取自understanding map上的有用信息。

module Async =
    let map f op = async {
        let! x    = op
        let value = f x
        return value
    }

具有类型签名('a -> 'b) -> Async<'a> -> Async<'b>

例如-

let onInts = async { return 1 }

...是async<int>,并且...

let onStrings = Async.map (fun x -> x.ToString()) onInts

...产生一个Async<string>