Полиморфный тип внутри модуля (OCaml)

Я просто определяю модуль Matrix следующим образом:

module Matrix =
  struct
    type element
    type t = element array array

    let make (nr: int) (nc: int) (init: element) : t =
      let result = Array.make nr (Array.make nc init) in
      for i = 0 to nr - 1 do
        result.(i) <- Array.make nc init
      done;
      result
  end

И let m = Matrix.make 3 4 0 выдает мне ошибку Ошибка: Это выражение имеет тип int, но ожидалось выражение типа Matrix.element. Затем я добавил 'a:

module Matrix =
  struct
    type element = 'a
    type t = element array array

    let make (nr: int) (nc: int) (init: element) : t =
      let result = Array.make nr (Array.make nc init) in
      for i = 0 to nr - 1 do
        result.(i) <- Array.make nc init
      done;
      result
  end

Компиляция модуля выдает ошибку Error: Unbound type parameter 'a.

Может ли кто-нибудь подсказать мне, как определить тип внутри моего модуля?

5
задан SoftTimur 15 January 2012 в 12:58
поделиться