Как использовать функтор в OCaml - PullRequest
0 голосов
/ 15 декабря 2018

Я не могу найти в интернете, как использовать написанный мной функтор.Я опубликую минимальный код, если вам нужно больше контекстной информации, скажите мне, и я добавлю, но я уверен, что это действительно легко сделать.

Я думаю, я просто не понимаю, что такое функторЯ вижу такие вещи (я буду использовать аналогию с Java, чтобы проиллюстрировать свое понимание, поскольку я новичок в OCaml):

  • sig (=) Интерфейс MyInterface
  • struct (=) Объект реализует MyInterface
  • functor (=) MyInterfaceBis расширяет MyInterface

Следующий пример, который я собираюсь привести, глуп, просто я могу понять концепцию, стоящую за ним:

module type tF = sig
type 'a t
  val create : 'a t
end

module F : tF = struct
  type 'a t = 'a list
  let create = []
end

module type tF2 = functor(F : tF) -> sig
  val foo : 'a F.t -> 'a F.t
end

module F2 : tF2 = functor(F : tF) -> struct
  let foo f = f
end

Я знаю, что могу сделать, например:

let test = F.create

Но я не знаю, как использовать F2.

Я пробовал это page но он не использует мои записи, и после этого я был более растерян.

1 Ответ

0 голосов
/ 15 декабря 2018

F2 принимает модуль с типом tF и создает модуль с одной функцией foo:

module NewF = F2 (F)

Для получения дополнительной информации см. раздел о функторах в реальном мире.OCaml .

...