▁annot ate ▁code ▁or ▁to ▁consider ▁computer - related ▁operations ▁and ▁function ing . ▁It ▁is ▁challeng ing ▁to ▁find ▁a ▁sufficiently ▁express ive ▁type ▁system ▁that ▁satisfies ▁all ▁programming ▁practices ▁in ▁a ▁type ▁safe ▁manner . ▁ ▁The ▁more ▁type ▁restrictions ▁that ▁are ▁im posed ▁by ▁the ▁compiler , ▁the ▁more ▁strongly ▁typed ▁a ▁programming ▁language ▁is . ▁Str ong ly ▁typed ▁languages ▁often ▁require ▁the ▁programmer ▁to ▁make ▁explicit ▁convers ions ▁in ▁context s ▁where ▁an ▁implicit ▁conversion ▁would ▁cause ▁no ▁harm . ▁Pascal ' s ▁type ▁system ▁has ▁been ▁described ▁as ▁" to o ▁strong " ▁because , ▁for ▁example , ▁the ▁size ▁of ▁an ▁array ▁or ▁string ▁is ▁part ▁of ▁its ▁type , ▁making ▁some ▁programming ▁tasks ▁difficult . ▁H askell ▁is ▁also ▁strongly ▁typed ▁but ▁its ▁types ▁are ▁automatically ▁infer red ▁so ▁that ▁explicit ▁convers ions ▁are ▁often ▁( but ▁not ▁always ) ▁unnecessary . ▁ ▁A ▁programming ▁language ▁compiler ▁can ▁also ▁implement ▁a ▁dependent ▁type ▁or ▁an ▁effect ▁system , ▁which ▁enables ▁even ▁more ▁program ▁specific ations ▁to ▁be ▁verified ▁by ▁a ▁type ▁check er . ▁Bey ond ▁simple ▁value - type ▁pairs , ▁a ▁virtual ▁" region " ▁of ▁code ▁is ▁associated ▁with ▁an ▁" effect " ▁component ▁describing ▁what ▁is ▁being ▁done ▁with ▁what , ▁and ▁en abling ▁for ▁example ▁to ▁" throw " ▁an ▁error ▁report . ▁Thus ▁the ▁symbol ic ▁system ▁may ▁be ▁a ▁type ▁and ▁effect ▁system , ▁which ▁end ows ▁it ▁with ▁more ▁safety ▁checking ▁than ▁type ▁checking ▁alone . ▁