Шаг 203.
Основы языка Haskell.
Классы и их экземпляры. Монадические классы

    На этом шаге мы рассмотрим это понятие.

    Термин "монада" происходит из области математики, известной как теория категорий.

Определение.
Монада (с точки зрения программиста на языке Haskell) (от англ. monad - монада, тройка в категории) - это абстрактный тип данных, связывающий:
  • (1) значения (присущие функциональному языку);
  • (2) действия (характеризующие операции ввода-вывода);
  • (3) императивное программирование.

    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.




Предыдущий шаг Содержание Следующий шаг