Aviso justo, eu sou novo em programação funcional, por isso posso ter muitas suposições ruins.
Eu tenho aprendido sobre tipos algébricos. Muitas linguagens funcionais parecem tê-las e são bastante úteis em conjunto com a correspondência de padrões. No entanto, que problema eles realmente resolvem? Eu posso implementar um tipo algébrico aparentemente (mais ou menos) em C # assim:
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
{
}
Mas acho que a maioria concorda que isso é uma bastardização da programação orientada a objetos, e você nunca deve fazê-lo. Então, a programação funcional apenas adiciona uma sintaxe mais limpa que faz com que esse estilo de programação pareça menos grosseiro? O que mais estou perdendo?
class ThirdOption : Option{}
e dou a você new ThirdOption()
onde você esperava Some
ou None
?
data Maybe a = Just a | Nothing
(equivalente a data Option a = Some a | None
no seu exemplo): você não pode adicionar um terceiro caso post-hoc. Embora você possa emular tipos de soma em C # da maneira que você mostrou, não é a mais bonita.