[swift-evolution] Declaring a function that always returns nil
Andrew Duncan
andrewzboard at gmail.com
Sun Jan 3 22:45:16 CST 2016
Yep, this has transformed from an evolution question to a how-to answer. exit(1).
Thanks Jack and Jaden for pointing out the retrospectively obvious. Just couldn’t see my own nose.
I liked Jeff’s Optional gambit though. Félix, je regrette that your name doesn’t start with ‘J’.
> On 3 Jan, 2016, at 20:36, Félix Cloutier <felixcca at yahoo.ca>
> wrote:
>
> IMO, this is the best way to approach it.
>
> Félix
>
>> Le 3 janv. 2016 à 22:54:17, Jack Lawrence via swift-evolution <swift-evolution at swift.org> a écrit :
>>
>> You could also use type inference on the return type:
>>
>> 1> func returnsNil<T>(errCode: Int) -> T? {
>> 2. print(errCode)
>> 3. return nil
>> 4. }
>> 5> func returnsAnOptional() -> Int? {
>> 6. return returnsNil(5)
>> 7. }
>>
>>
>>> On Jan 3, 2016, at 7:51 PM, Jeff Kelley via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>>> Just spit-balling here, but couldn’t you do this with a generic extension on Optional?
>>>
>>>> extension Optional {
>>>> func returnsNil(errorCode: Int) -> Wrapped? {
>>>> logError(errorCode)
>>>> return nil
>>>> }
>>>> }
>>>
>>>
>>> Jeff Kelley
>>>
>>> SlaunchaMan at gmail.com | @SlaunchaMan | jeffkelley.org
>>>
>>>> On Jan 3, 2016, at 10:43 PM, Andrew Duncan via swift-evolution <swift-evolution at swift.org> wrote:
>>>>
>>>> It should be possible to declare a function that returns only nil, and have its return type be substitutable for any function that returns and Optional. This is something like having a bottom type but not really. What I mean is:
>>>>
>>>> func returnsNil(errCode:Int) -> nil {
>>>> logError(errCode) // A side-effect. Not FP, sosumi.
>>>> return nil
>>>> }
>>>>
>>>> func returnAOptional() -> A? {
>>>> // Bla bla. We discover an error so we decide to bail and return nil.
>>>> return returnsNil(errCode) // Would be legal.
>>>> }
>>>> func returnsBOptional() -> B? {
>>>> // Bla bla. We discover an error so we decide to bail and return nil.
>>>> return returnsNil(errCode) // Would also be legal.
>>>> }
>>>>
>>>> I seek a return type that conforms to any Optional -- I think that implies it *must* (or correct me here) be nil.
>>>>
>>>> Now perhaps this is already possible with wizardry from the Next Level. (There always is one.)
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
More information about the swift-evolution
mailing list