>( volume
>, area
>) where
>import qualified Geometry.Cuboid as Cuboid
>volume :: Float –> Float
>volume side = Cuboid.volume side side side
>area :: Float –> Float
>area side = Cuboid.area side side side
Обратите внимание, что мы поместили файл Sphere.hs в папку с именем Geometry и определили имя модуля как >Geometry.Sphere
. То же самое мы сделали для куба и параллелепипеда. Также отметьте, что во всех трёх модулях определены функции с одинаковыми именами. Мы вправе так поступать, потому что функции находятся в разных модулях.
Итак, если мы редактируем файл, который находится на одном уровне с папкой Geometry, то запишем:
>import Geometry.Sphere
после чего сможем вызывать функции >area
и >volume
, которые вычислят площадь и объём сферы. Если нам потребуется использовать несколько наших модулей, мы должны выполнить квалифицированный импорт, потому что они экспортируют функции с одинаковыми именами. Делаем так:
>import qualified Geometry.Sphere as Sphere
>import qualified Geometry.Cuboid as Cuboid
>import qualified Geometry.Cube as Cube
Затем мы сможем вызывать функции >Sphere.area
, >Sphere.volume
, >Cuboid.area
и т. д., и каждая функция вычислит площадь или объём соответствующего объекта.
В следующий раз, когда вы поймаете себя за написанием огромного файла с кучей функций, попытайтесь выяснить, какие функции служат некоей общей цели, и можно ли включить их в отдельный модуль.
Позднее при написании программы со схожей функциональностью вы сможете просто импортировать свой модуль.