package Ġcom . github . fs bar ata . functional . utils Ċ Ċ import Ġcom . github . fs bar ata . functional . data . list . Non Empty List Ċ import Ġcom . github . fs bar ata . functional . data . set . Non Empty Set Ċ Ċ internal Ġfun Ġ< A > Ġnon Empty Iterator ( head : ĠA , Ġtail : ĠIterator < A >) Ġ= Ġobject : ĠIterator < A > Ġ{ Ċ ĉ private Ġvar Ġbegin : ĠBoolean Ġ= Ġtrue ĊĊ ĉ override Ġfun Ġhas Next () Ġ= Ġbegin Ġ|| Ġtail . hasNext () ĊĊ ĉ override Ġfun Ġnext (): ĠA Ġ{ Ċĉ ĉ if Ġ( begin ) Ġ{ Ċĉĉ ĉ begin Ġ= Ġfalse Ċĉĉ ĉ return Ġhead Ċĉ ĉ } Ċĉ ĉ return Ġtail . next () Ċ ĉ } Ċ } Ċ Ċ internal Ġfun Ġ< A > Ġnon Empty Iterator ( head : ĠIterator < A >, Ġtail : ĠA ) Ġ= Ġobject : ĠIterator < A > Ġ{ Ċ ĉ private Ġvar Ġhas Next : ĠBoolean Ġ= Ġtrue ĊĊ ĉ override Ġfun Ġhas Next () Ġ= Ġhas Next ĊĊ ĉ override Ġfun Ġnext (): ĠA Ġ= Ċĉ ĉ if Ġ( head . hasNext ()) Ġhead . next () Ċĉ ĉ else Ġ{ Ċĉĉ ĉ hasNext Ġ= Ġfalse Ċĉĉ ĉ tail Ċĉ ĉ } Ċ } Ċ Ċ internal Ġfun Ġ< A > ĠIterator < A >. to N el Unsafe () Ġ= ĠNon Empty List . of ( next (), Ġas Sequence (). toList ()) Ċ fun Ġ< A > ĠIterator < A >. to N el (): ĠNon Empty List < A >? Ġ= Ċ ĉ if Ġ(! hasNext ()) Ġnull Ġelse Ġto N el Unsafe () Ċ Ċ internal Ġfun Ġ< A > ĠIterator < A >. to N es Unsafe () Ġ= ĠNon Empty Set . of ( next (), Ġas Sequence (). toSet ()) Ċ fun Ġ< A > ĠIterator < A >. to N es (): ĠNon Empty Set < A >? Ġ= Ċ ĉ if Ġ(! hasNext ()) Ġnull Ġelse Ġto N es Unsafe () Ċ