Функтор — это фундаментальный класс типов в Haskell, который позволяет нам применять функции к значениям в контексте. В этой статье мы погрузимся в мир функторов, исследуем различные методы и предоставим примеры кода, иллюстрирующие их использование. Независимо от того, являетесь ли вы новичком или опытным разработчиком Haskell, это руководство поможет вам понять и использовать возможности функторов в вашем коде.
Методы функтора:
fmap
: функцияfmap
— это основной метод класса типов Functor. Он применяет функцию к значениям внутри функтора и возвращает новый функтор с преобразованными значениями. Вот пример:
data MyFunctor a = MyValue a deriving (Show)
instance Functor MyFunctor where
fmap f (MyValue a) = MyValue (f a)
-- Usage
addOne :: Int -> Int
addOne x = x + 1
myValue :: MyFunctor Int
myValue = MyValue 5
transformedValue = fmap addOne myValue -- Result: MyValue 6
(<$)
: функция(<$)
заменяет все значения внутри функтора заданным значением. Его часто используют для введения постоянного значения в функтор. Вот пример:
import Data.Functor
-- Usage
myList :: [Int]
myList = [1, 2, 3]
newList = 0 <$ myList -- Result: [0, 0, 0]
(<$>)
: оператор(<$>)
является инфиксным синонимомfmap
. Это позволяет более лаконично применить функцию к функтору. Вот пример:
import Data.Functor
-- Usage
addOne :: Int -> Int
addOne x = x + 1
myList :: [Int]
myList = [1, 2, 3]
transformedList = addOne <$> myList -- Result: [2, 3, 4]
void
: функцияvoid
отбрасывает значения внутри функтора и заменяет их на()
. Он обычно используется, когда вас интересуют только побочные эффекты вычислений. Вот пример:
import Data.Functor
-- Usage
printHello :: IO ()
printHello = putStrLn "Hello, World!"
voidHello = void printHello -- Result: IO ()