moduleControl.Comonadwhereinfixl5=>>classCopointedwwhereextract::wa->aclass(Copointedw,Functorw)=>Comonadwwhereduplicate::wa->w(wa)extend::wa->(wa->b)->wb(=>>)::wa->(wa->b)->wbw=>>f=extendwfextendwf=fmapf(duplicatew)instanceCopointed[]whereextract=headinstanceComonad[]whereduplicate[]=[]duplicatelist@(h:t)=list:duplicatet-- That was easy!