[**Часть 1**][1] **Часть 2**   Что вы сделаете, если завтра выиграете в лотерею? Купите спортивную машину, бросите работу и поедете в турне по США? А может быть станете основателем собственной компании, приумножите состояние и купите личный самолёт?   Мы все любим делать планы, и чаще всего они опираются на наше финансовое состояние. Такие планы могут быть описаны функцией. К примеру, план покупки машины это:  
pair<Car, Cash> buyCar(Cash cashIn)
   На входе у нас некоторое количество денег (**Cash**), а на выходе новенькая машина (**Car**) и какое-то количество(не факт, что положительное!) оставшихся финансов (**Cash**).В общем, финансовый план — это функция, которая принимает деньги и возвращает результат, плюс оставшееся количество денег. Он может быть описан шаблоном:  
template<class A>
using Plan = function<pair<A, Cash>(Cash)>;
   Вы можете объединять маленькие планы чтобы получить большой. К примеру, вы можете пустить оставшиеся после покупки машины средства на свою поездку или инвестировать в бизнес. Если у вас есть вещи, уже вам принадлежащие, они могут стать часть ваших планов:  
template<class A>
Plan<A> got_it(A a)
{
    return [a](Cash s) { return make_pair(a, s); };
}
   Какое отношение имеют все эти мечты к решению нашего [пазла][2]? Ранее я говорил, что нам нужно где-то сохранять состояние, и это способ, которым программисты на функциональных языках работают с состоянием. Вместо явного модифицирования состояния они пишут код, который генерирует план действий.  [Читать дальше →][3]
  [1]: 
http://habrahabr.ru/company/infopulse/blog/260809/
  [2]: 
http://habrahabr.ru/company/infopulse/blog/260809/
  [3]: 
http://habrahabr.ru/post/261145/#habracut