▁causing ▁the ▁compilation ▁to ▁fail . ▁ ▁Linear ▁types ▁▁ ▁Linear ▁types , ▁based ▁on ▁the ▁theory ▁of ▁linear ▁logic , ▁and ▁closely ▁related ▁to ▁uniqu eness ▁types , ▁are ▁types ▁assigned ▁to ▁values ▁having ▁the ▁property ▁that ▁they ▁have ▁one ▁and ▁only ▁one ▁reference ▁to ▁them ▁at ▁all ▁times . ▁These ▁are ▁valuable ▁for ▁describing ▁large ▁imm utable ▁values ▁such ▁as ▁files , ▁strings , ▁and ▁so ▁on , ▁because ▁any ▁operation ▁that ▁simultaneously ▁dest ro ys ▁a ▁linear ▁object ▁and ▁creates ▁a ▁similar ▁object ▁( such ▁as ▁' str = ▁str ▁+ ▁" a " ') ▁can ▁be ▁optimized ▁" under ▁the ▁h ood " ▁into ▁an ▁in - place ▁mut ation . ▁Norm ally ▁this ▁is ▁not ▁possible , ▁as ▁such ▁mut ations ▁could ▁cause ▁side ▁effects ▁on ▁parts ▁of ▁the ▁program ▁holding ▁other ▁references ▁to ▁the ▁object , ▁viol ating ▁refer ential ▁trans par ency . ▁They ▁are ▁also ▁used ▁in ▁the ▁prototype ▁operating ▁system ▁Sing ular ity ▁for ▁inter process ▁communication , ▁stat ically ▁ens uring ▁that ▁processes ▁cannot ▁share ▁objects ▁in ▁shared ▁memory ▁in ▁order ▁to ▁prevent ▁race ▁conditions . ▁The ▁C lean ▁language ▁( a ▁H askell - like ▁language ) ▁uses ▁this ▁type ▁system ▁in ▁order ▁to ▁gain ▁a ▁lot ▁of ▁speed ▁( comp ared ▁to ▁performing ▁a ▁deep ▁copy ) ▁while ▁remaining ▁safe . ▁ ▁Inter section ▁types ▁▁ ▁Inter section ▁types ▁are ▁types ▁describing ▁values ▁that ▁belong ▁to ▁both ▁of ▁two ▁other ▁given ▁types ▁with ▁over la pping ▁value ▁sets . ▁For ▁example