Ocaml 可添加号码

问题描述 投票:0回答:1

我正在学习 Ocaml,从我为论文学习的一点 Haskell 中学习,我想知道是否有类似的机制(类型类)来表示 2 个数字是可加的(就像 int、float 的泛型) 、字符串等)。我知道在 ocaml 类型中不存在类,但我想知道类似的机制来表达相同的东西

我正在尝试创建一个具有常见“方法”添加的模块类型,但没有成功

haskell functional-programming ocaml monads
1个回答
1
投票

不,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
© www.soinside.com 2019 - 2024. All rights reserved.