// +build ignore,OMIT

package main

import "fmt"

type Point struct{ x, y int }

func (p Point) String() string { return fmt.Sprintf("Point{%d, %d}", p.x, p.y) }

type Celsius float32
type Fahrenheit float32

func (t Celsius) String() string           { return fmt.Sprintf("%g°C", t) }
func (t Fahrenheit) String() string        { return fmt.Sprintf("%g°F", t) }
func (t Celsius) ToFahrenheit() Fahrenheit { return Fahrenheit(t*9/5 + 32) }

func main() {
	// START OMIT
	type Stringer interface {
		String() string
	}

	var v Stringer // HL
	var corner = Point{1, 1}
	var boiling = Celsius(100)

	v = corner
	fmt.Println(v.String()) // dynamic dispatch
	fmt.Println(v)

	v = boiling.ToFahrenheit()
	fmt.Println(v.String()) // dynamic dispatch
	fmt.Println(v)
	// STOP OMIT
}
