For example, let's say that I'm expecting a number. Should I try casting to a uint64?, float?, etc. We should either provide "canonical" types aliases:
type Integer uint64
type String string
// ...
Or return a custom type:
type Value interface{}
func (v Value) Int() uint64, error {}
func (v Value) String() string, error {}
func (v Value) Nil() error {}