标签: fsharpx

F#记录构造函数

有没有办法在F#中为F#记录类型调用构造函数?

我的动机是我一直在使用FSharpx的应用验证,但发现自己编写了大量的构造记录的样板函数.

buildAddress函数,例如在简单的样板文件中,我希望尽可能摆脱它.

       let buildAddress streetNumber streetLine1 streetLine2 suburb state postcode =
            {
                Address.StreetNumber = streetNumber
                StreetLine1 = streetLine1
                StreetLine2 = streetLine2
                Suburb = suburb
                State = state
                Postcode = postcode
            }

       let validateAddress streetNumber streetLine1 streetLine2 suburb state postcode =
            buildAddress 
                <!> isNumber streetNumber 
                <*> Success streetLine1 
                <*> Success streetLine2 
                <*> Success suburb 
                <*> Success state
                <*> validatePostcode postcode
Run Code Online (Sandbox Code Playgroud)

f# applicative fsharpx

5
推荐指数
1
解决办法
445
查看次数

计算表达式与应用函子和什么不是

不完全确定标题描述没问题,但我确实有以下代码:

paket.dependencies:

source https://www.nuget.org/api/v2
nuget fsharpx.extras
nuget mongodb.driver
Run Code Online (Sandbox Code Playgroud)

some.fsx:

#r @".\packages\MongoDB.Bson\lib\net45\MongoDB.Bson.dll"
#r @".\packages\MongoDB.Driver\lib\net45\MongoDB.Driver.dll"
#r @".\packages\MongoDB.Driver.Core\lib\net45\MongoDB.Driver.Core.dll"

#r @".\packages\FSharpX.Extras\lib\net45\FSharpX.Extras.dll"


open MongoDB
open MongoDB.Driver
open MongoDB.Bson 
open MongoDB.Bson.Serialization

open FSharpx.Choice

let private createClient (connectString:string) = MongoClient(connectString)
let CreateClient = protect createClient

let private getDb name (client:IMongoClient) = client.GetDatabase(name)
let GetDB1 name client =
    choose {
        let! c = client
        return! (protect (getDb name) c)
    }

let GetDB2 name (client:Choice<IMongoClient, exn>) =
    protect (getDb name)
    <!> client
Run Code Online (Sandbox Code Playgroud)

这个"excersise"的意思是编写GetDB2,以便它与GetDB1一样,但使用运算符(applicatives?),但我现在无法转过头去管理它.

上面的代码编译,但对于GetDB1和GetDB2签名是不相等的,和Im显然做一些正确的.

val GetDB1 : …
Run Code Online (Sandbox Code Playgroud)

monads f# computation-expression fsharpx

3
推荐指数
1
解决办法
243
查看次数