Moduł pierwszego rodzaju? - Lista 8 zad 2

Co to jest moduł pierwszego rodzaju?

Zadanie 2 (8p.)

Rozważmy sygnaturę dla funkcyjnych kolejek priorytetowych:

  module type PQUEUE =
  sig
    type priority
    type 'a t

    exception EmptyPQueue

    val empty : 'a t
    val insert : 'a t -> priority -> 'a -> 'a t
    val remove : 'a t -> priority * 'a * 'a t
  end     
  1. Zdefiniuj moduł PQueue : PQUEUE, przyjmując typ priority = int. Reprezentacja kolejki
    może być dowolna.
  2. Wykorzystaj moduł PQueue do napisania funkcji sortowania list liczb typu int.
  3. Uogólnij rozwiązanie punktów 1 i 2 definiując funktor,
    który dla zadanego modułu OrdType : ORDTYPE zwraca moduł o sygnaturze PQUEUE, gdzie
  module type ORDTYPE =
  sig
    type t
    type comparison = LT | EQ | GT

    val compare : t -> t -> comparison
  end     

Zmodyfikuj odpowiednio funkcję sortowania list z p. 2 i przetestuj ją.
Przy pomocy modułów pierwszego rodzaju zdefiniuj funkcję sort, która dla dowolnego
modułu implementującego sygnaturę ORDTYPE dla pewnego typu i dla dowolnej listy elementów
tego typu posortuje listę zgodnie z porządkiem definiowanym przez moduł. Użyj funktora z
poprzedniego punktu. Poza modułami pierwszego rodzaju będzie potrzebne jeszcze jedno
rozszerzenie języka.

Tu chyba była odpowiedź: https://realworldocaml.org/v1/en/html/first-class-modules.html

Poniżej jest link do odpowiedniego miejsca w dokumentacji OCamla.
http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec244
Wspomniałem o tym na wykładzie 7, str. 15.

1 polubienie