// Copyright 2014 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package interfaces

type I interface {
	Rand() int32
}

func Add3(r I) int32 {
	return r.Rand() + r.Rand() + r.Rand()
}

// chosen by fair dice roll.
// guaranteed to be random.
type seven struct{}

func (seven) Rand() int32 { return 7 }

func Seven() I { return seven{} }

type WithParam interface {
	HasParam(p bool)
}

type Error interface {
	Err() error
}

func CallErr(e Error) error {
	return e.Err()
}

// not implementable
type I1 interface {
	J()
	H() *seven // not bound
}

// not implementable
type I2 interface {
	f()
	G()
}

// implementable
// (the implementor has to find a source of I1s)
type I3 interface {
	F() I1
}

// not bound
func F() seven  { return seven{} }
func G(u seven) {}
