package Ġopt ik al . opt ics . sample Ċ Ċ import Ġopt ik al . opt ics . Lens Ċ import Ġopt ik al . opt ics . L enses Ċ import Ġopt ik al . opt ics . Pr isms ĊĊ Ċ @ Pr isms Ġsealed Ġclass ĠDomain Ċ @ L enses Ġdata Ġclass ĠStreet ( val Ġnumber : ĠInt , Ġval Ġname : ĠString ) Ġ: ĠDomain () Ċ @ L enses Ġdata Ġclass ĠAddress ( val Ġcity : ĠString , Ġval Ġstreet : ĠStreet ) Ġ: ĠDomain () Ċ @ L enses Ġdata Ġclass ĠCompany ( val Ġname : ĠString , Ġval Ġaddress : ĠAddress ) Ġ: ĠDomain () Ċ @ L enses Ġdata Ġclass ĠEmployee ( val Ġname : ĠString , Ġval Ġcompany : ĠCompany ) Ġ: ĠDomain () Ċ Ċ val Ġemployee Ġ= ĠEmployee (" John ", ĠCompany (" Awesome Ġinc ", ĠAddress (" Awesome Ġtown ", ĠStreet ( 2 3 , Ġ" awesome Ġstreet ")) )) Ċ Ċ val Ġemployee 1 Ġ= Ġemployee . copy ( ĊĠĠĠĠĠĠĠ Ġcompany Ġ= Ġemployee . company . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= Ġemployee . company . address . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreet Ġ= Ġemployee . company . address . street . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġemployee . company . address . street . name . capitalize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ċ ) Ċ Ċ val Ġemployee Street Name Lens : ĠLens < Employee , ĠString > Ġ= Ġemployee Company () Ġcompose Lens Ġcompany Address () Ġcompose Lens Ġaddress Street () Ġcompose Lens Ġstreet Name () Ċ Ċ val Ġemployee 2 Ġ= Ġemployee Street Name Lens . modify ({ Ġname Ġ-> Ġname . capitalize () Ġ}, Ġemployee ) Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġprintln ( employee ) ĊĊĠĠĠ Ġprintln (" Is Ġrunning Ġnested Ġcopies Ġequal Ġto Ġcomp osing Ġl enses ? Ġ${ employee 1 Ġ== Ġemployee 2 }. ") ĊĠĠĠ Ġprintln (" The Ġresult Ġis Ġ$ employee 2 ") ĊĊĠĠĠ Ġdomain Employee () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOption ( employee ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" The Ġpr ism Ġlooked Ġinside Ġthe Ġdomain Ġand Ġfound Ġthe Ġcorrect Ġemployee : Ġ$ employee " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ Ġ" The Ġpr ism Ġdidn 't Ġfind Ġany ting " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also (:: println ) ĊĊĠĠĠ Ġdomain Employee () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOption ( Street ( 0 , Ġ" Fake Ġstreet ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" The Ġpr ism Ġlooked Ġinside Ġthe Ġdomain Ġand Ġfound Ġthe Ġcorrect Ġemployee : Ġ$ employee " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ Ġ" The Ġpr ism Ġdidn 't Ġfind Ġany ting " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also (:: println ) Ċ Ċ } ĊĊ