interface Print { fn print(T) fn println(T) { print "\n" print } } impl Print requires: [Write] { inline fn print(T) { 1 write } } impl Print<&T> requires: [Print] { inline fn print(&T) { @ print } } impl Print<[]> { inline fn print([]: _) { "[]" print } } impl Print<[A]> requires: [Print] { inline fn print([A]: t) { '[' print t::0 print ']' print } } impl Print<[A B]> requires: [Print Print] { inline fn print([A B]: t) { '[' print t::0 print ' ' print t::1 print ']' print } } impl Print<[A B C]> requires: [Print Print Print] { inline fn print([A B C]: t) { '[' print t::0 print ' ' print t::1 print ' ' print t::2 print ']' print } } impl Print<[A B C D]> requires: [Print Print Print Print] { inline fn print([A B C D]: t) { '[' print t::0 print ' ' print t::1 print ' ' print t::2 print ' ' print t::3 print ']' print } } impl Print<[A B C D E]> requires: [ Print Print Print Print Print ] { inline fn print([A B C D E]: t) { '[' print t::0 print ' ' print t::1 print ' ' print t::2 print ' ' print t::3 print ' ' print t::4 print ']' print } }