reader monad в двух словах
Apr. 2nd, 2011 11:03 amПредставьте, ваш код вдруг, оказывается, должен зависеть от конфигурации. Значит, он теперь является такой функцией:
Или, переставляя параметры,
Если уже есть функция
Что делать, если выход одной функции подаётся на вход другой?
Как их скомпоновать в
В принципе, у нас получается функция из декартова произведения конфигураций:
(Детали)
даёт
(/Детали)
Ну, из этого легко сделать формат
достаточно взять сначала диагональ,
А потом уже применить H'.
Шо за диагональ? Это которая
Вопросы?
Вход -> (Конфигурация -> Выход)
Или, переставляя параметры,
Конфигурация -> (Вход -> Выход)
Если уже есть функция
F: Вход -> Выход
, не зависящая от конфигурации, то из неё можно сделать Конфигурация -> (Вход -> Выход)
, просто это будет постоянная (по конфигурации) функция.Что делать, если выход одной функции подаётся на вход другой?
F: Конфигурация -> (A -> B), G: Конфигурация -> (B -> C)
Как их скомпоновать в
H: Конфигурация -> (A -> C)
?В принципе, у нас получается функция из декартова произведения конфигураций:
H': (Конфигурация × Конфигурация) -> (A -> C)
(Детали)
F: Конфигурация -> (A -> B), G: Конфигурация -> (B -> C)
даёт
F × G: (Конфигурация × Конфигурация) -> ((A -> B) × (B -> C)) -> (A -> C) -- последний шаг представляет собой композицию функций
(/Детали)
Ну, из этого легко сделать формат
H: Конфигурация -> (A -> C)
достаточно взять сначала диагональ,
Конфигурация -> (Конфигурация × Конфигурация)
А потом уже применить H'.
Шо за диагональ? Это которая
x
сопоставляет пару (x, x)
.Вопросы?