package Ġarrow . validation Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . core . Tuple 2 Ċ import Ġarrow . core . Tuple 3 Ċ import Ġarrow . core . Tuple 4 Ċ import Ġarrow . core . getOrElse Ċ import Ġarrow . core . identity Ċ import Ġarrow . core . maybe Ċ import Ġarrow . data . List K Ċ import Ġarrow . data . N el Ċ import Ġarrow . data . fix Ċ import Ġarrow . data . k Ċ import Ġarrow . data . extensions . list k . traverse . traverse Ċ import Ġarrow . core . type classes . Applic ative Error Ċ import Ġarrow . core . type classes . Tra verse Ċ Ċ data Ġclass ĠRef ined Predicate Exception ( val Ġmsg : ĠString ) Ġ: ĠIllegalArgumentException ( msg ) Ċ Ċ interface ĠRe fin ement < F , ĠA > Ġ{ ĊĠ Ġfun Ġapplic ative Error (): ĠApplic ative Error < F , ĠN el < Ref ined Predicate Exception >> ĊĊĠ Ġfun ĠA . ref inement (): ĠBoolean ĊĊĠ Ġfun Ġinvalid Value Msg ( a : ĠA ): ĠString ĊĊĠ Ġfun Ġref ine ( value : ĠA ): ĠKind < F , ĠA > Ġ= Ġapplic ative Error (). run Ġ{ ĊĠĠĠ Ġvalue . ref inement () ĊĠĠĠĠĠ Ġ. maybe Ġ{ Ġjust ( value ) Ġ} ĊĠĠĠĠĠ Ġ. getOrElse Ġ{ Ġraise Error ( N el . of ( Ref ined Predicate Exception ( invalid Value Msg ( value )))) Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġ< B > Ġref ine ( value : ĠA , Ġf : Ġ( A ) Ġ-> ĠB ): ĠKind < F , ĠB > Ġ= ĊĠĠĠ Ġapplic ative Error (). run Ġ{ Ġref ine ( value ). map ( f ) Ġ} ĊĊĠ Ġfun Ġ< B > Ġref ine 2 ( a : ĠA , Ġb : ĠA , Ġf : Ġ( Tuple 2 < A , ĠA >) Ġ-> ĠB ): ĠKind < F , ĠB > Ġ= ĊĠĠĠ Ġapplic ative Error (). run Ġ{ Ġmap ( ref ine ( a ), Ġref ine ( b ), Ġf ) Ġ} ĊĊĠ Ġfun Ġ< B > Ġref ine 3 ( a : ĠA , Ġb : ĠA , Ġc : ĠA , Ġf : Ġ( Tuple 3 < A , ĠA , ĠA >) Ġ-> ĠB ): ĠKind < F , ĠB > Ġ= ĊĠĠĠ Ġapplic ative Error (). run Ġ{ Ġmap ( ref ine ( a ), Ġref ine ( b ), Ġref ine ( c ), Ġf ) Ġ} ĊĊĠ Ġfun Ġ< B > Ġref ine 4 ( a : ĠA , Ġb : ĠA , Ġc : ĠA , Ġd : ĠA , Ġf : Ġ( Tuple 4 < A , ĠA , ĠA , ĠA >) Ġ-> ĠB ): ĠKind < F , ĠB > Ġ= ĊĠĠĠ Ġapplic ative Error (). run Ġ{ Ġmap ( ref ine ( a ), Ġref ine ( b ), Ġref ine ( c ), Ġref ine ( d ), Ġf ) Ġ} ĊĊĠ Ġfun Ġ< G , ĠB > Ġref ine Tra verse ( value : ĠKind < G , ĠA >, Ġtraverse : ĠTra verse < G >, Ġf : Ġ( A ) Ġ-> ĠB ): ĠKind < F , ĠKind < G , ĠB >> Ġ= ĊĠĠĠ Ġtraverse . run Ġ{ Ġvalue . traverse ( applic ative Error ()) Ġ{ Ġref ine ( it , Ġf ) Ġ} Ġ} ĊĊĠ Ġfun Ġ< B > Ġref ine Tra verse List ( elements : ĠList < A >, Ġf : Ġ( A ) Ġ-> ĠB ): ĠKind < F , ĠList < B >> Ġ= ĊĠĠĠ Ġapplic ative Error (). run Ġ{ Ġref ine Tra verse ( elements . k (), ĠList K . traverse (), Ġf ). map Ġ{ Ġit . fix () Ġ} Ġ} ĊĊĠ Ġfun Ġ< G > Ġref ine Sequence ( value : ĠKind < G , ĠA >, Ġtraverse : ĠTra verse < G >): ĠKind < F , ĠKind < G , ĠA >> Ġ= ĊĠĠĠ Ġref ine Tra verse ( value , Ġtraverse , Ġ:: identity ) ĊĊĠ Ġfun Ġref ine Sequence List ( elements : ĠList < A >): ĠKind < F , ĠList < A >> Ġ= ĊĠĠĠ Ġapplic ative Error (). run Ġ{ Ġref ine Sequence ( elements . k (), ĠList K . traverse ()). map Ġ{ Ġit . fix () Ġ} Ġ} Ċ } Ċ