▁▁▁ ▁Book mark _ Stack s . Create ▁( S ▁=> ▁Document . Book marks , ▁Initial _ Size ▁=> ▁ 1 0 ); ▁▁▁ ▁-- ▁Now , ▁open ▁the ▁file ▁Document _ Name ▁and ▁read ▁it ▁in ... ▁ ▁end ▁Edit ; ▁ ▁Adv antages ▁and ▁limitations ▁ ▁The ▁language ▁syntax ▁allows ▁precise ▁specification ▁of ▁constraints ▁on ▁generic ▁formal ▁parameters . ▁For ▁example , ▁it ▁is ▁possible ▁to ▁specify ▁that ▁a ▁generic ▁formal ▁type ▁will ▁only ▁accept ▁a ▁mod ular ▁type ▁as ▁the ▁actual . ▁It ▁is ▁also ▁possible ▁to ▁express ▁constraints ▁between ▁generic ▁formal ▁parameters ; ▁for ▁example : ▁▁ ▁generic ▁▁▁▁ ▁type ▁Index _ Type ▁is ▁( <> ); ▁-- ▁must ▁be ▁a ▁discrete ▁type ▁▁▁▁ ▁type ▁Element _ Type ▁is ▁private ; ▁-- ▁can ▁be ▁any ▁non limited ▁type ▁▁▁▁ ▁type ▁Array _ Type ▁is ▁array ▁( Index _ Type ▁range ▁< >) ▁of ▁Element _ Type ; ▁ ▁In ▁this ▁example , ▁Array _ Type ▁is ▁const rained ▁by ▁both ▁Index _ Type ▁and ▁Element _ Type . ▁When ▁instanti ating ▁the ▁unit , ▁the ▁programmer ▁must ▁pass ▁an ▁actual ▁array ▁type ▁that ▁satisfies ▁these ▁constraints . ▁ ▁The ▁dis adv antage ▁of ▁this ▁fine - gra ined ▁control ▁is ▁a ▁complicated ▁syntax , ▁but , ▁because ▁all ▁generic ▁formal ▁parameters ▁are ▁completely ▁defined ▁in ▁the ▁specification , ▁the ▁compiler ▁can ▁instantiate ▁gener ics ▁without ▁looking ▁at ▁the ▁body ▁of ▁the ▁generic . ▁ ▁Un like ▁C ++, ▁Ada ▁does ▁not ▁allow ▁special ised ▁generic ▁instances , ▁and