gpt4 book ai didi

syntax - F# 类型错误,有一个缩进级别,而不是另一个

转载 作者:行者123 更新时间:2023-12-05 00:52:23 24 4
gpt4 key购买 nike

我正在通过 Hopac文档,我遇到了这个奇怪的类型错误:

let create x = Job.delay <| fun () ->
let c = {reqCh = Ch (); replyCh = Ch ()}
Job.iterateServer x <| fun x ->
c.reqCh >>= function
| Get -> c.replyCh *<- x >>-. x
| Put x -> Job.result x
>>-. c

Scrapers.SC.fsx(48,10): error FS0001: Type mismatch. Expecting a
''a'
but given a
'Cell<'a>'
The types ''a' and 'Cell<'a>' cannot be unified.
cCell<'a> .这段代码与页面中的代码编译得很好:
let create x = Job.delay <| fun () ->
let c = {reqCh = Ch (); replyCh = Ch ()}
Job.iterateServer x <| fun x ->
c.reqCh >>= function
| Get -> c.replyCh *<- x >>-. x
| Put x -> Job.result x
>>-. c

这两者之间的唯一区别是第一个缩进的深度 - 2 而不是 4。

通常,当出现缩进问题时,我会收到“可能不正确的缩进”警告——而不是类型错误。所以它一定很困惑。

用F#十年了,还是不明白缩进规则。

我错过了什么?

最佳答案

>>-.运算符是 4 个字符,因此您需要更多的缩进才能使其不与上面的表达式连接。运算符的规则是为了制作类似的东西

    expr
|> f1
|> f2

工作,使用管道中表达式左侧的运算符。

关于syntax - F# 类型错误,有一个缩进级别,而不是另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42940157/

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