f# - Why do I need a type annotation here? -
in following code:
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 | none -> { result = none; rest = input } | _ -> (f r.result) r.rest with type annotation f, type thenbind is:
p:(string -> parseresult<'a>) -> f:(option<'a> -> parser<'b>) -> input:string -> parseresult<'b> but without annotation, it's:
p:(string -> parseresult<'a>) -> f:(option<'a> -> string -> parseresult<'b>) -> input:string -> parseresult<'b> why?
you don't need type annotation. 2 types identical.
parser<'a> alias string -> parseresult<'a>, makes no difference whether result type of f declared parser<'b> or string -> parseresult<'b>. they're exact same type.
Comments
Post a Comment