我正在尝试编写一个函数,该函数使用正向组合返回一个包含所有大写字符的字符串。
这是我的代码,没有前向组合:
let toUpper s = String.map System.Char.ToUpper s
这是我尝试使用正向合成的方法:
let toUpper2 s = s >> Seq.map System.Char.ToUpper >> Seq.map string >> String.concat ""
我使它可以与管道前移一起使用,但是不能使其与前向组合一起使用。任何帮助表示赞赏!
答案 0 :(得分:6)
这两个等效项:
let toUpper1 = Seq.map System.Char.ToUpper >> Seq.map string >> String.concat ""
let toUpper2 s = s |> Seq.map System.Char.ToUpper |> Seq.map string |> String.concat ""
但是toUpper1
存在问题。它是通用的,会导致ML语言出现问题:
typecheck:值限制。值“ toUpper1”已推断 具有通用类型 val toUpper1:('_a->字符串)当'_a:> seq时,要么显式指定'toUpper1'的参数,要么,如果您不打算使用 要通用,请添加类型注释。
因此需要类型注释:
let toUpper1 : string -> string = Seq.map System.Char.ToUpper >> Seq.map string >> String.concat ""