What if you need the fallback value to be an error possessing information about what went wrong?
data Maybe a = Just a | Nothing
data Either a b = Left a | Right bWhat if you need the fallback value to be an error possessing information about what went wrong?
data Maybe a = Just a | Nothing
data Either a b = Left a | Right bPersonally, I just want higher-kinded types, and for the following code snippets to work as-is:
enum Either<A,B> {
case Left(A)
case Right(B)
}
enum Tree<A> {
case Leaf
case Node(Tree<A>, A, Tree<A>)
}
The first breaks because of the "Unimplemented non-fixed multi-payload enum layout" compiler error, and the second breaks because enums have value semantics. Both can be worked around in full generality by declaring a 'Box<T>' generic wrapper class, but that workaround is inelegant and cumbersome.In the meantime, you can vaguely simulate it with named tuples.
let response = (error: "Could not connect to server", success: false)
It's not quite the same, but at least there's an easy way to bundle your data together.
edit: I like Someone's suggestion to use and discussion about using enums as union types below.
enum Barcode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
}
This can be read as:“Define an enumeration type called Barcode, which can take either a value of UPCA with an associated value of type (Int, Int, Int, Int), or a value of QRCode with an associated value of type String.”
So, you can do
enum ResultOrError {
case Result(ReturnValue)
case Error(int,String)
}
Unfortunately, enums and generics do not mix, AFAIK, so it looks clumsy.I think the reason for the special syntax of '?.' is that the designers think it is a very common case, at least in Swift programs.
And yes, I would like to see a better syntax for that, too. A generalization of C's short-hand 'if'
flag ? trueExpression : falseExpression;
For switch statements would be cool.Wait, what? Swift has sum types (ie. enums), so there's no need for it to be built in.