Advertencia justa, soy nuevo en la programación funcional, por lo que puedo tener muchos supuestos erróneos.
He estado aprendiendo sobre tipos algebraicos. Muchos lenguajes funcionales parecen tenerlos, y son bastante útiles junto con la coincidencia de patrones. Sin embargo, ¿qué problema resuelven realmente? Puedo implementar un tipo algebraico aparentemente (más o menos) en C # como este:
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
{
}
Pero creo que la mayoría estaría de acuerdo en que esto es una bastarización de la programación orientada a objetos, y nunca deberías hacerlo. Entonces, ¿la programación funcional solo agrega una sintaxis más limpia que hace que este estilo de programación parezca menos asqueroso? ¿Qué más me estoy perdiendo?
class ThirdOption : Option{}
y le doy un lugar new ThirdOption()
donde esperaba Some
o None
?
data Maybe a = Just a | Nothing
(equivalente a data Option a = Some a | None
en su ejemplo): no puede agregar un tercer caso post-hoc. Si bien puedes emular tipos de suma en C # de la manera que has mostrado, no es el más bonito.