# Generics (design/generics.md): a blank, <T>, filled per use by the compiler. Every blank is# announced after the name with what it accepts (owner, 2026-10-02): `<T>: Number`, `<T>: any`.interfaceNumber{int32int64bin64}fnmax<T:Number>['a':<T>,'b':<T>]-><T>{if'a'>'b'{returngive'a';}# a <T> may be owned: generic code writes the verbsreturngive'b';}fnfirst<T:any>[lent'xs':list[<T>]]-><T>orfail[empty]{iflist.length[lend'xs']equal_to0{failempty;}return'xs'[pos1];}structPair<A:any,B:any>{left:<A>,right:<B>}# blanks in the order announced: A, BenumMaybe<T:any>{none,some:<T>}fndescribe[lent'p':Pair[int32,str.utf8]]->str.utf8{returnto.stored.str.utf8['p'.left]++" "++'p'.right;}MAIN{std::print.useful[max[3,9]," ",max[2.5,1.5],newln];# int32 and bin64 versions, one sourcelet'nums':=[4,5,6];let'f':=first[lend'nums']otherwise0;std::print.useful['f',newln];let'p':Pair[int32,str.utf8]=Pair[left=7,right="seven"];std::print.useful[describe[lend'p'],newln];let'm':=Maybe.some[42];match'm'{none{std::print.stored["nothing",newln];}some'v'{std::print.useful["got ",'v',newln];}}}