On Jun 29, 2016, at 9:33 AM, David Sweeris <[email protected]> wrote:

> Types where it makes sense, or types for which such semantics would be a good 
> idea? Because, for example, you could do something like this:
> struct HTMLParser : IntegerLiteralConvertible {
>     init(integerLiteral value: IntegerLiteralType) {
>         htmlMajorVersion = value
>         htmlMinorVersion = 0
>     }
> }
> 
> Back in the realm of math, I don’t think Sedenions — a 16-demensional (in the 
> sense that complex numbers are 2-dimensional) number  — have a well-defined 
> division operator.
> 
> As a more likely example, I don’t think it’d be too much of a stretch to 
> attach integer literal semantics to matrices:
> let x: Matrix = 1 // Sets diagonal to 1
> Matrices don’t have a division operator, and you can’t do any of the 
> `Arithmetic` functions to two matrices without first checking their 
> dimensions.

There is at least an argument to be made that *division* doesn’t belong.  I 
think most people's common-sense notion of being “numbery” lies somewhere 
between a ring and a field (but probably doesn’t include the Sedenions, which 
aren’t associative).

That said, there are certainly some practical considerations in favor of 
including division in Arithmetic.

I think matrix dimension mismatches (for variably-dimensioned types) are best 
handled via precondition; the operator exists, but will trap if they don’t 
match.

> Plus, inherently-dimensioned matrix types:
> var x = Matrix<_2,_3>() // "_2" and "_3" are dummy types
> can’t implement `*`, unless their two dimensions happen to be equal — 
> "Matrix<2,3>() * Matrix<2,3>()” doesn’t have a valid definition.

I’m not sure it makes sense to have scalar initializers or literals for 
non-square matrices, since you don't have 1*x = x.

We’re a little bit off in the weeds here =)
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to