如何避免“'_a”类型而不进行重新播放

时间:2013-12-09 12:08:35

标签: generics ocaml polymorphism

抱歉,我的英语不好。

我将从简单的例子开始:

    let find2 f g x =
            let rec _find2 = function
                    | h::t -> if f h && g h then h else _find2 t
                    | [] -> raise Not_found
            in
            _find2
    ;;

    let find = find2 (fun _ -> true);;

find的类型为

    ('_a -> bool) -> '_b -> '_a list -> '_a

所以这不是多态代码,正如我想要的那样。 我读了它,我知道它为什么会发生,但我不知道如何解决它而不重复代码。这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

要避免遇到所谓的“值限制”,您需要做的就是确保声明语法定义一个函数。在大多数情况下,您可以通过显式创建一个参数来轻松完成此操作,如下所示:

let find g = find2 (fun _ -> true) g