Алгебраические типы. Часть 3. Полиморфные варианты

Главный недостаток алгебраических типов явным образом следует из их главного преимущества перед классами в ООП. В прошлой заметке мы обсуждали тот факт, что алгебраические типы являются “закрытыми”, и вы не можете добавить новый конструктор, не изменив само объявление алгебраического типа, что позволяет еще на этапе компиляции получить полную информацию о том, какие конструкторы включает наш…

0

Алгебраические типы. Часть 2. ООП как путь к динамической типизации

Возможно, вам доводилось слышать такое утверждение о языке программирования Хаскелл – Хаскелл это полностью статически типизированный язык. Строго говоря, это, конечно же, не совсем так, но сейчас речь не об этом. Согласитесь, что это утверждение в каком-то плане интригует? Нам как бы намекают, что есть простые языки со статической типизацией (вроде C#), а есть такие…

5

Алгебраические типы. Часть 1

В теории типов алгебраическим типом данных называют такой тип, который представляет собой объединение различных значений, причем каждое из этих значений является отдельным типом данных. C#-программисту на первый взгляд такая формулировка может показаться весьма туманной. (И не в последнюю очередь потому что я ее на редкость туманно сформулировал). К тому же в большинстве популярных объектно-ориентированных языков,…

0

Чистые функции

На первый взгляд с чистыми функциями все просто. Функция называется чистой, если она удовлетворяет двум требованиям: Функция всегда возвращает одно и то же значение для одних и тех аргументов. Т.е. если мы один раз вызвали чистую функцию с аргументами, к примеру, 12 и 42, то когда нам потребуется вызвать ее еще раз, с точно такими…

2

Эти удивительные каррированные функции

Имея в языке только каррированные функции и левоассоциативный оператор вызова, вы можете с легкостью имитировать такие возможности как передача неограниченного количества параметров, при этом не вводя в язык какие-либо дополнительные механизмы. К примеру, сколько аргументов у такой функции: out “Hello” //Вывод: //Hello out “First” “Second” “Third” //Вывод: //First //Second //Third Если вы читали мою предыдущую…

2

Каррирование и частичное применение

Наверняка вы уже слышали такие термины как каррирование и частичное применение. Термины эти используются достаточно широко, однако несмотря на это существует определенная путаница, из-за которой некоторые даже считают, что каррирование и частичное применение – это одно и то же. Кто в этом виноват? Наверное, авторы других блогов. Но я, разумеется, не такой. Давайте забудем на…

0

Функциональный и императивный

А какой код, собственно, является императивным? Как ни странно, это не самый тривиальный вопрос. “Императивный” часто противопоставляется “функциональному”, когда формально эти понятия не связаны. Правда в том, что функциональный код по идее не является императивным, но, согласитесь, что подобная формулировка не слишком хорошо подходит для определения. Термин “императивный” должен противоставляться “декларивному”. И вот мы имеем…

0

Функциональное программирование изменит мир

Видимо, у каждого в жизни наступает такое время, когда просто не можешь не завести какой-нибудь технический блог. Вот и я не избежал такой участи. Не могу не признать, что существенное влияние тут оказал и тот факт, что с недавнего времени я являюсь сотрудником компании Майкрософт, а следовательно, могу создать блог на такой популярной и уважаемой…

1