На этом шаге мы рассмотрим описание такого модуля.
Приведем общий вид такого модуля.
module <Имя_модуля> (<Объект_1>,[<Объект_2>...]) where <Объект_1> [<Объект_2>] ...
Написание имени модуля должно начинаться с заглавной буквы, при этом не обязательно, чтобы его имя совпадало с именем файла, в котором он располагается (как например, в языках Pascal и Java).
Имена объектов, указанных в круглых скобках после объявления имени модуля, будут "видны" извне создаваемого модуля, т.е. они явно могут экспортироваться.
module Main where main:: IO() main = putStrLn "Hello, world!"
Иногда типы данных содержат много конструкторов и их перечисление в скобках после наименования типа может занять много строк кода. В связи с этим описание всех конструкторов сводится к написанию двух точек (..):
<Объект_1>::=<Имя_типа_данных> (..)
На следующем шаге мы рассмотрим описание модуля с импортируемым модулем.