我正在尝试探索F#interactive中的::
等运算符的类型。
但是我得到了这些消息:
Unexpected symbol '::' in expression. Expected ')' or other token.
即使我用(::)
包围它。
答案 0 :(得分:8)
我这样做:
> let inline showmecons a b = a :: b;;
val inline showmecons : 'a -> 'a list -> 'a list
或
> let inline showmepow a b = a ** b;;
val inline showmepow :
^a -> ^b -> ^a when ^a : (static member Pow : ^a * ^b -> ^a)
答案 1 :(得分:4)
如果用括号括起来,你会看到常用操作符的类型:
> (+);;
val it : (int -> int -> int) = <fun:it@4-5>
不幸的是,这会将运算符的类型限制为一种特定类型 - F#Interactive不会打印多态定义(带约束)。您可以使用Stephen建议的解决方法(并定义新的inline
函数)来查看。
它不适用于::
的原因是::
实际上是一个特殊的句法结构(直接在F#规范中定义)。