相关疑难解决方法(0)

F#中的加法类型(+)

我刚刚了解到OCAML必须有一个.用于执行浮点运算的后缀.一个例子是3. +. 4.equals 7.(float).但是,F#以相同的方式处理浮点和整数运算,因此3 + 4(int)和3. + 4.(float)都有效.

F#+自然分配给int,因此let add a b = a + b属于类型int -> int -> int.确实(+)给了我val it : (int -> int -> int) = <fun:it@6-1>.

这导致了以下序列,我认为这非常违反直觉:

> 3. + 4.;;
val it : float = 7.0
> (+);;
val it : (int -> int -> int) = <fun:it@8-2>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是: "重载"是否由编译器中的特殊机制/案例完成,或者这是一个语言范围的事情所以我可能可以定义一个名为add(或其他任何)的函数,它具有一个整数和一个定义浮子(或任何其他类型).

f# ocaml types inline

13
推荐指数
2
解决办法
1755
查看次数

F#中的Hindley Milner类型推断

有人可以在下面的F#程序中解释一步一步的类型推断:

let rec sumList lst =
    match lst with
    | [] -> 0
    | hd :: tl -> hd + sumList tl
Run Code Online (Sandbox Code Playgroud)

我特别希望逐步了解Hindley Milner的统一过程是如何运作的.

f# type-inference hindley-milner

8
推荐指数
1
解决办法
1111
查看次数

标签 统计

f# ×2

hindley-milner ×1

inline ×1

ocaml ×1

type-inference ×1

types ×1