gpt4 book ai didi

f# - F#中的自定义计算表达式

转载 作者:行者123 更新时间:2023-12-04 17:05:37 25 4
gpt4 key购买 nike

我一直在玩F#(又名计算表达式)中的monad,我写了这个简单的Identity monad:

type Identity<'a> = 
| Identity of 'a

type IdentityBuilder() =
member x.Bind (Identity v) f = f(v)
member x.Return v = Identity v
let identity = new IdentityBuilder()

let getInt() = identity { return Int32.Parse(Console.ReadLine()) }

let calcs() = identity {
let! a = getInt() // <- I get an error here
let! b = getInt()
return a + b }

我不明白我在标记行中遇到的错误:

This expression was expected to have type Identity<'a> but here has type 'b * 'c



我认为这没有任何意义,因为getInt()显然是 Identity<'a>类型的值。

谁能告诉我我在做什么错?

最佳答案

计算表达式语法希望Bind具有元组而不是curried参数。
所以

member x.Bind((Identity v), f) = f(v)

有关所有签名,请参见 this article

关于f# - F#中的自定义计算表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com