> On Jun 8, 2016, at 10:28 AM, Антон Жилин via swift-evolution 
> <[email protected]> wrote:
> 
> I'll talk about how "bottom" mechanic works there. (I'm not a Haskell expert, 
> but I'll at least try ;) )
> 
> Firstly, there is a Void type in standard library, which is exactly what  
> enum Never {}  in Swift is.
> Pretty trivial: it is useful as a parameter of higher kinded types, e.g. 
> Either.

Not really. Void is a "Unit" type - it's not an empty enum, it's an enum with 
exactly one value. The set of values for the Void type contains exactly one 
possible value.

> 
> Then, there is bottom. Long story short, each type in Haskell includes an 
> undefined (bottom, _|_) value. That corresponds to partially defined 
> functions in set theory.
> 
> Example 1: Integer -> Integer  function can either return a Z number, or be 
> undefined at that input (return bottom)
> Example 2: ()  type actually contains two elements: () and _|_
> Example 3: Void  contains one element: _|_
> 
> Bottom value results in an error on most occasions.
> 
> What does returning Void mean? In set theory, set of  Integer -> Void  is an 
> empty set. In type theory,  Integer -> Void  can contain a single element 
> that returns bottom.
> 
> Applying that to Swift, we express bottom value by not returning on a 
> particular input (due to a crash or an infinite loop). We are going to 
> express bottom type by Never (or aliases). The only way to return bottom type 
> is as well going to be returning bottom value (in Swift meaning).
> 
> There is also such a function in Haskell:  absurd :: forall a. Void -> a
> Of course, it just returns bottom value of type a. The philosophy of this is 
> "from false follows anything" or like, "if we are going to crash, then we can 
> do anything".
> Based on this, we can implement conversions from Void to any type in Swift. 
> It would look like:
> 
> func implementContract() -> Int {
>     return fatalError("unimplemented")
> }
> 
> `return` is crucial here.
> This is what I suggest to change in the proposal.
> 
> - Anton
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to