▁input ▁data ), ▁whereas ▁a ▁random - access ▁iterator ▁also ▁provides ▁direct ▁constant - time ▁access ▁to ▁any ▁element ▁of ▁the ▁sequence ▁( e . g . ▁suitable ▁for ▁a ▁vector ). ▁An ▁important ▁point ▁is ▁that ▁a ▁data ▁structure ▁will ▁return ▁a ▁model ▁of ▁the ▁most ▁general ▁concept ▁that ▁can ▁be ▁implemented ▁efficiently — comput ational ▁complexity ▁requirements ▁are ▁explicitly ▁part ▁of ▁the ▁concept ▁definition . ▁This ▁limits ▁the ▁data ▁structures ▁a ▁given ▁algorithm ▁can ▁be ▁applied ▁to ▁and ▁such ▁complexity ▁requirements ▁are ▁a ▁major ▁determin ant ▁of ▁data ▁structure ▁choice . ▁Gener ic ▁programming ▁similarly ▁has ▁been ▁applied ▁in ▁other ▁domains , ▁ ▁e . g . ▁graph ▁algorithms . ▁ ▁Note ▁that ▁although ▁this ▁approach ▁often ▁util izes ▁language ▁features ▁of ▁compile - time ▁generic ity / templates , ▁it ▁is ▁in ▁fact ▁independent ▁of ▁particular ▁language - techn ical ▁details . ▁Gener ic ▁programming ▁pione er ▁Alexander ▁Ste pan ov ▁wrote , ▁ ▁B jar ne ▁Str ou stru p ▁noted , ▁ ▁Other ▁programming ▁parad ig ms ▁that ▁have ▁been ▁described ▁as ▁generic ▁programming ▁include ▁Dat atype ▁generic ▁programming ▁as ▁described ▁in ▁ ▁" Generic ▁Program ming ▁— ▁an ▁Introduction ". ▁The ▁ ▁approach ▁is ▁a ▁light weight ▁generic ▁programming ▁approach ▁for ▁H askell . ▁ ▁In ▁this ▁article ▁we ▁distinguish ▁the ▁high - level ▁programming ▁parad ig ms ▁of ▁generic ▁programming , ▁above , ▁from ▁the ▁lower - level ▁programming ▁language ▁generic ity ▁mechan isms ▁used ▁to ▁implement ▁them ▁( see ▁Program ming ▁language ▁support ▁for ▁generic