Учебники

Haskell — Модули

Если вы работали на Java, вы бы знали, как все классы связаны в папку с именем package . Точно так же Haskell можно рассматривать как набор модулей .

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

Вы можете импортировать функцию из одного модуля в другой модуль. Все операторы «import» должны идти первыми, прежде чем вы начнете определять другие функции. В этой главе мы познакомимся с различными функциями модулей Haskell.

Модуль списка

Список предоставляет несколько замечательных функций для работы с данными типа списка . После того, как вы импортируете модуль List, вы получаете широкий спектр функций.

В следующем примере мы использовали некоторые важные функции, доступные в модуле List.

Live Demo

import Data.List  

main = do  
   putStrLn("Different methods of List Module") 
   print(intersperse '.' "Tutorialspoint.com") 
   print(intercalate " " ["Lets","Start","with","Haskell"]) 
   print(splitAt 7 "HaskellTutorial") 
   print (sort [8,5,3,2,1,6,4,2])

Здесь у нас есть много функций, даже не определяя их. Это потому, что эти функции доступны в модуле списка. После импорта модуля List компилятор Haskell сделал все эти функции доступными в глобальном пространстве имен. Следовательно, мы могли бы использовать эти функции.

Наш код даст следующий вывод —

Different methods of List Module
"T.u.t.o.r.i.a.l.s.p.o.i.n.t...c.o.m"
"Lets Start with Haskell"
("Haskell","Tutorial")
[1,2,2,3,4,5,6,8]

Чар модуль

Модуль Char имеет множество предопределенных функций для работы с типом символов. Посмотрите на следующий блок кода —

Live Demo

import Data.Char 

main = do  
   putStrLn("Different methods of Char Module") 
   print(toUpper 'a') 
   print(words "Let us study tonight") 
   print(toLower 'A')

Здесь функции toUpper и toLower уже определены внутри модуля Char . Это даст следующий результат —

Different methods of Char Module
'A'
["Let","us","study","tonight"]
'a'

Модуль карты

Карта — это несортированный тип данных с добавленной стоимостью. Это широко используемый модуль с множеством полезных функций. В следующем примере показано, как можно использовать предопределенную функцию, доступную в модуле «Карта».

Live Demo

import Data.Map (Map) 
import qualified Data.Map as Map  --required for GHCI  

myMap :: Integer -> Map Integer [Integer] 
myMap n = Map.fromList (map makePair [1..n]) 
   where makePair x = (x, [x])  

main = print(myMap 3)

Это даст следующий результат —

fromList [(1,[1]),(2,[2]),(3,[3])] 

Установить модуль

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

Взгляните на следующий пример кода

Live Demo

import qualified Data.Set as Set   

text1 = "Hey buddy"   
text2 = "This tutorial is for Haskell"   

main = do  
   let set1 = Set.fromList text1   
       set2 = Set.fromList text2 
   print(set1) 
   print(set2)    

Здесь мы модифицируем строку в набор. Это даст следующий результат. Обратите внимание, что выходной набор не имеет повторения символов.

fromList " Hbdeuy"
fromList " HTaefhiklorstu"

Пользовательский модуль

Давайте посмотрим, как мы можем создать собственный модуль, который можно вызывать в других программах. Для реализации этого пользовательского модуля мы создадим отдельный файл с именем «custom.hs» вместе с нашим «main.hs» .

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

custom.hs

module Custom ( 
   showEven, 
   showBoolean 
) where 

showEven:: Int-> Bool 
showEven x = do 

if x 'rem' 2 == 0 
   then True 
else False 
showBoolean :: Bool->Int 
showBoolean c = do 

if c == True 
   then 1 
else 0 

Наш пользовательский модуль готов. Теперь давайте импортируем его в программу.

main.hs

import Custom 

main = do 
   print(showEven 4) 
   print(showBoolean True) 

Наш код сгенерирует следующий вывод —

True
1

Функция showEven возвращает True , поскольку «4» является четным числом. Функция showBoolean возвращает «1», поскольку булева функция, которую мы передали в функцию, — «True».