▁} ▁} ▁ ▁This ▁is ▁not ▁type ▁safe . ▁By ▁up - cast ing ▁a ▁ ▁to ▁an ▁, ▁one ▁can ▁try ▁to ▁place ▁a ▁dog ▁in ▁a ▁cat ▁shelter . ▁That ▁does ▁not ▁meet ▁ ▁parameter ▁restrictions , ▁and ▁will ▁result ▁in ▁a ▁runtime ▁error . ▁The ▁lack ▁of ▁type ▁safety ▁( known ▁as ▁the ▁" cat call ▁problem " ▁in ▁the ▁E iff el ▁community , ▁where ▁" cat " ▁or ▁" CAT " ▁is ▁a ▁Ch anged ▁Av ail ability ▁or ▁Type ) ▁has ▁been ▁a ▁long - standing ▁issue . ▁Over ▁the ▁years , ▁various ▁combinations ▁of ▁global ▁static ▁analysis , ▁local ▁static ▁analysis , ▁and ▁new ▁language ▁features ▁ ▁have ▁been ▁proposed ▁to ▁rem edy ▁it , ▁ ▁and ▁these ▁have ▁been ▁implemented ▁in ▁some ▁E iff el ▁comp ilers . ▁ ▁Despite ▁the ▁type ▁safety ▁problem , ▁the ▁E iff el ▁design ers ▁consider ▁cov ari ant ▁parameter ▁types ▁cru cial ▁for ▁model ing ▁real ▁world ▁requirements . ▁The ▁cat ▁shelter ▁illustr ates ▁a ▁common ▁phenomen on : ▁it ▁is ▁a ▁kind ▁of ▁animal ▁shelter ▁but ▁has ▁additional ▁restrictions , ▁and ▁it ▁seems ▁reasonable ▁to ▁use ▁inheritance ▁and ▁restricted ▁parameter ▁types ▁to ▁model ▁this . ▁In ▁propos ing ▁this ▁use ▁of ▁inheritance , ▁the ▁E iff el ▁design ers ▁reject ▁the ▁L isk ov ▁substitution ▁principle , ▁which ▁states ▁that ▁objects ▁of ▁sub classes ▁should ▁always ▁be ▁less ▁restricted ▁than ▁objects ▁of ▁their ▁super class . ▁ ▁One ▁other ▁instance ▁of ▁a ▁main stream ▁language ▁allowing ▁cov