Add "maybe" keyword / Explicit Support for Ternary Logic


(David Sweeris) #1

Does anyone else occasionally do stuff like this?
typealias Tern = Bool?
let maybe:Tern = nil

Personally, I’ve only needed it a couple times, but it seems like it could be useful. Maybe Tern should be its own enum instead of a typealias.
Either way, aesthetically speaking, it’d be nice to have “maybe” be colored the same as “true” and “false”.

I’m not sure if there’s a generally agreed-upon ternary truth-table, especially for code like:
  if maybe == true {
    …
  } else {
    …
  }

(Come to think of it, didn’t someone suggest abandoning:
  if something == something_else {
    …
  } else {
    …
  }
in favor of:
  switch (something == something_else) {
  case true: …
  case false: …
  }
If so, that’d clean up the syntax since switches have to be exhaustive anyway… If a comparison results in a Tern you need to have a maybe case, if it results in a Bool you don’t.

Anyway, thoughts?


(Robert Widmann) #2

I’m not sure I understand what you intend to do here. If you mean to introduce a non-determinism type, that’s what the list monad is for. If you want true trivalent logic, then the type Tern you describe is precisely the type that it corresponds to.

···

On Jan 7, 2016, at 7:03 PM, Dave via swift-evolution <swift-evolution@swift.org> wrote:

Does anyone else occasionally do stuff like this?
typealias Tern = Bool?
let maybe:Tern = nil

Personally, I’ve only needed it a couple times, but it seems like it could be useful. Maybe Tern should be its own enum instead of a typealias.
Either way, aesthetically speaking, it’d be nice to have “maybe” be colored the same as “true” and “false”.

I’m not sure if there’s a generally agreed-upon ternary truth-table, especially for code like:
  if maybe == true {
    …
  } else {
    …
  }

(Come to think of it, didn’t someone suggest abandoning:
  if something == something_else {
    …
  } else {
    …
  }
in favor of:
  switch (something == something_else) {
  case true: …
  case false: …
  }
If so, that’d clean up the syntax since switches have to be exhaustive anyway… If a comparison results in a Tern you need to have a maybe case, if it results in a Bool you don’t.

Anyway, thoughts?

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(David Sweeris) #3

Oh! I hadn’t considered a non-deterministic option. That’s interesting…

To answer your question, though, I was referring to a trivalent type. Mostly I just think it’d be nice to have the keyword coloring for “maybe”.

···

On Jan 7, 2016, at 18:10, Developer <devteam.codafi@gmail.com> wrote:

I’m not sure I understand what you intend to do here. If you mean to introduce a non-determinism type, that’s what the list monad is for. If you want true trivalent logic, then the type Tern you describe is precisely the type that it corresponds to.

On Jan 7, 2016, at 7:03 PM, Dave via swift-evolution <swift-evolution@swift.org> wrote:

Does anyone else occasionally do stuff like this?
typealias Tern = Bool?
let maybe:Tern = nil

Personally, I’ve only needed it a couple times, but it seems like it could be useful. Maybe Tern should be its own enum instead of a typealias.
Either way, aesthetically speaking, it’d be nice to have “maybe” be colored the same as “true” and “false”.

I’m not sure if there’s a generally agreed-upon ternary truth-table, especially for code like:
  if maybe == true {
    …
  } else {
    …
  }

(Come to think of it, didn’t someone suggest abandoning:
  if something == something_else {
    …
  } else {
    …
  }
in favor of:
  switch (something == something_else) {
  case true: …
  case false: …
  }
If so, that’d clean up the syntax since switches have to be exhaustive anyway… If a comparison results in a Tern you need to have a maybe case, if it results in a Bool you don’t.

Anyway, thoughts?

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution