we can define a good representation of a new type by overloading `Base.show(io::IO, x::Foo)`:
```
import Base: show
type Foo
x
y
end
function show(io::IO, x::Foo)
println("x ---> $(x.x)")
println("y ---> $(x.y)")
end
julia> Foo(1,2)
x ---> 1
y ---> 2
```
but I don't know why julia will show `Foo` 3 times when running
`[Foo(1,2)]`:
```
julia> [Foo(1,2)]
1-element Array{Foo,1}:
x ---> 1
y ---> 2
x ---> 1
y ---> 2
x ---> 1
y ---> 2
```
BTW, the whitespace in the beginning of 3rd line is so wired...
