On Wed, Oct 24, 2018 at 10:22 AM Andy Balholm <[email protected]> wrote:
>
> Here’s my attempt at streamlining it, as well as adding a way to deal with
> the operator/method dichotomy:
> https://gist.github.com/andybalholm/8165da83c10a48e56590c96542e93ff2
Thanks!
However, I think yours is a somewhat different approach altogether.
The main idea I have is that existing types should be used as
contracts. That means no operators in contracts.
Also: when you list types in a contract:
contract X {
T1
T2
}
I defined it to mean that any type satisfying X must satisfy both T1 and T2.
And with "like" type contract specifications (enumerated contracts)
contract X like(int,int8,int16...)
A type satisfying X is a derivative of any one of the types listed. So
it is possible to write:
contract StrNum {
like(int, int8, int16,...)
interface {
String() string
}
}
meaning StrNum must be an integer that implements String()
The "type switch" for contracts imply that contracts are a runtime
construct. In my case, contracts are purely compile time.
>
> Andy
>
> On Oct 23, 2018, at 9:37 AM, Burak Serdar <[email protected]> wrote:
>
> On Mon, Oct 22, 2018 at 2:10 PM Burak Serdar <[email protected]> wrote:
>
>
> On Mon, Oct 22, 2018 at 1:53 PM Marvin Renich <[email protected]> wrote:
>
>
> * Burak Serdar <[email protected]> [181018 15:08]:
>
> tbh, I am not trying to avoid operator overloading, I am trying to
> avoid the contracts. With operator overloading, you can write:
>
> func F(a,b type T like(int,X)) {
> if a<b {
> ...
> }
> }
>
> provided X is a type that supports <.
>
>
> Are you trying to avoid the concept of contracts or the specific syntax
> proposed in the design draft?
>
>
>
> My intent was to use existing types as contracts instead of an
> abstract contract specification. In this scenario, a contract is a
> more abstract concept that an interface. Above, type T like(int,X)
> would mean:
> - func F compiles for T=int and T=X
> - F can be instantiated for any type derived from int or X
> So instead of specifying the precise type semantics required by F,
> you'd approximate the intent and declare that F would work for types
> that look like int, and X.
>
> When you apply the same idea to structs:
>
> type T like struct {a, b, int}
>
> would mean that T can be substituted by any struct containing two int
> fields called a and b.
>
> This idea ran into problems later on: I cannot explain simple
> contracts such as "type T must support ==".
>
>
>
> I typed this up in a more organized way, and it turned out to be an
> alternative declaration for contracts without touching the generics
> parts of the proposal.
>
> https://gist.github.com/bserdar/8f583d6e8df2bbec145912b66a8874b3
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.