Справедливе попередження, я новачок у функціональному програмуванні, тому я можу дотримуватися багатьох поганих припущень.
Я дізнався про алгебраїчні типи. Багато функціональних мов, здається, мають їх, і вони досить корисні в поєднанні зі збігом шаблонів. Однак яку проблему вони насправді вирішують? Я можу реалізувати начебто (на зразок) алгебраїчний тип у C #, як це:
public abstract class Option { }
public class None : Option { }
public class Some<T> : Option
{
public T Value { get; set; }
}
var result = GetSomeValue();
if(result is None)
{
}
else
{
}
Але я думаю, що більшість погодиться, що це бастардизація об'єктно-орієнтованого програмування, і ти ніколи цього не повинен робити. Тож чи функціональне програмування просто додає більш чистий синтаксис, який робить цей стиль програмування здається менш грубим? Що ще мені не вистачає?
class ThirdOption : Option{}
і дам тобі, new ThirdOption()
де ти очікував, Some
або None
?
data Maybe a = Just a | Nothing
(еквівалентний data Option a = Some a | None
у вашому прикладі): ви не можете додавати третій випадок після закінчення. У той час як ви можете сортувати емулювати типи сум у C # так, як ви показали, це не найкрасивіше.