gpt4 book ai didi

f# - 为什么我需要一个类型注解?

转载 作者:行者123 更新时间:2023-12-01 09:22:37 30 4
gpt4 key购买 nike

在以下代码中:

type ParseResult<'a> =
{
Result : Option<'a>;
Rest : string
}

type Parser<'a> = string -> ParseResult<'a>

let ThenBind p (f : Option<'a> -> Parser<'b>) : Parser<'b> =
fun input ->
let r = p input
match r.Result with
| None -> { Result = None; Rest = input }
| _ -> (f r.Result) r.Rest

使用 f 的类型注释, ThenBind 的类型是:

p:(string -> ParseResult<'a>) ->
f:(Option<'a> -> Parser<'b>) ->
input:string -> ParseResult<'b>

但没有注释,它是:

p:(string -> ParseResult<'a>) ->
f:(Option<'a> -> string -> ParseResult<'b>) ->
input:string -> ParseResult<'b>

为什么?

最佳答案

您不需要类型注释。这两种类型是相同的。

Parser<'a>只是一个别名 string -> ParseResult<'a> , 所以 f 的结果类型没有区别声明为 Parser<'b>string -> ParseResult<'b> .它们是完全相同的类型。

关于f# - 为什么我需要一个类型注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822725/

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