我正在学习 Ocaml,从我为论文学习的一点 Haskell 中学习,我想知道是否有类似的机制(类型类)来表示 2 个数字是可加的(就像 int、float 的泛型) 、字符串等)。我知道在 ocaml 类型中不存在类,但我想知道类似的机制来表达相同的东西
我正在尝试创建一个具有常见“方法”添加的模块类型,但没有成功
不,OCaml 没有类型类。
Float
和 Int
模块都实现了几个常见的功能,例如 add
、sub
、mul
、div
等
它们也都有一个类型
t
并根据 t
实现这些功能。这允许函子抽象出这些行为并以大致相同的方式工作。
# module Math (N : sig
type t
val add : t -> t -> t
val sub : t -> t -> t
val mul : t -> t -> t
val div : t -> t -> t
end) = struct
type t = N.t
let ( + ) = N.add
let ( - ) = N.sub
let ( * ) = N.mul
let ( / ) = N.div
end;;
module Math :
functor
(N : sig
type t
val add : t -> t -> t
val sub : t -> t -> t
val mul : t -> t -> t
val div : t -> t -> t
end)
->
sig
type t = N.t
val ( + ) : t -> t -> t
val ( - ) : t -> t -> t
val ( * ) : t -> t -> t
val ( / ) : t -> t -> t
end
# let open Math (Int) in
45 + 67;;
- : int = 112
# let open Math (Float) in
45.6 + 87.2;;
- : float = 132.8