На этом шаге мы рассмотрим это понятие.
Термин "монада" происходит из области математики, известной как теория категорий.
1. Монадический класс Monad, определяющий методы для связывания переменных и организации передачи их значений из одного вычислительного процесса в другой в чёткой последовательности.
Любой тип данных, являющийся экземпляром данного класса, определяет некоторый императивный мир в рамках функционального программирования для выполнения последовательных действий определённого характера, который зависит от специфики типа.
Операции класса Monad m:
return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b fail :: String -> m a
2. Монадический класс Functor предназначен для описания возможности производить проекции структур данных друг на друга.
Любой тип, являющийся экземпляром этого класса, должен иметь единственную функцию, которая позволяет преобразовать данные этого типа в соответствии с определением некоторой заданной функции.
Таким образом, единственный метод этого класса определяет функцию высшего порядка.
Операции класса Functor f:
fmap :: (a -> b) -> (f a -> f b)
Пример.
>fmap (+1) [1,2,3] >fmap (+1) (Just 6) [2,3,4] (Just 7) >fmap reverse getLine >fmap (+1) Nothing Hello Nothing "olleH"
На следующем шаге мы рассмотрим монаду вычислений с побочными эффектами IO.