package Ġarrow . mt l Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . core . Const Ċ import Ġarrow . core . Const Partial Of Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . For Const Ċ import Ġarrow . core . For Id Ċ import Ġarrow . core . Id Ċ import Ġarrow . core . Left Ċ import Ġarrow . core . Option Ċ import Ġarrow . core . Right Ċ import Ġarrow . core . extensions . const . div isible . div isible Ċ import Ġarrow . core . extensions . const . eq K . eq K Ċ import Ġarrow . core . extensions . eq Ċ import Ġarrow . core . extensions . id . eq K . eq K Ċ import Ġarrow . core . extensions . id . mon ad . mon ad Ċ import Ġarrow . core . extensions . id . traverse . traverse Ċ import Ġarrow . core . extensions . mon oid Ċ import Ġarrow . core . extensions . option . functor . functor Ċ import Ġarrow . fx . For IO Ċ import Ġarrow . fx . IO Ċ import Ġarrow . fx . extensions . io . applic ative . applic ative Ċ import Ġarrow . fx . extensions . io . concurrent . concurrent Ċ import Ġarrow . fx . extensions . io . functor . functor Ċ import Ġarrow . fx . extensions . io . mon ad . mon ad Ċ import Ġarrow . fx . mt l . concurrent Ċ import Ġarrow . mt l . extensions . e ith ert . alternative . alternative Ċ import Ġarrow . mt l . extensions . e ith ert . applic ative . applic ative Ċ import Ġarrow . mt l . extensions . e ith ert . div isible . div isible Ċ import Ġarrow . mt l . extensions . e ith ert . eq K . eq K Ċ import Ġarrow . mt l . extensions . e ith ert . functor . functor Ċ import Ġarrow . mt l . extensions . e ith ert . mon ad . mon ad Ċ import Ġarrow . mt l . extensions . e ith ert . sem ig roup K . sem ig roup K Ċ import Ġarrow . mt l . extensions . e ith ert . traverse . traverse Ċ import Ġarrow . test . Unit Spec Ċ import Ġarrow . test . generators . gen K Ċ import Ġarrow . test . l aws . Alternative L aws Ċ import Ġarrow . test . l aws . Concurrent L aws Ċ import Ġarrow . test . l aws . Div isible L aws Ċ import Ġarrow . test . l aws . Sem ig roup KL aws Ċ import Ġarrow . test . l aws . Tra verse L aws Ċ import Ġarrow . type classes . Eq Ċ import Ġarrow . type classes . Eq K Ċ import Ġio . kot lint est . properties . Gen Ċ import Ġio . kot lint est . properties . for All Ċ Ċ class ĠEither T Test Ġ: ĠUnit Spec () Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġid EQ K : ĠEq K < Kind < Kind < For Either T , ĠFor Id >, ĠInt >> Ġ= ĠEither T . eq K ( Id . eq K (), ĠInt . eq ()) ĊĊĠĠĠ Ġval Ġio EQ K : ĠEq K < Kind < Kind < For Either T , ĠFor IO >, ĠString >> Ġ= ĠEither T . eq K ( IO . eq K (), ĠEq . any ()) ĊĊĠĠĠ Ġval Ġconst EQ K : ĠEq K < Kind < Kind < For Either T , ĠKind < For Const , ĠInt >>, ĠInt >> Ġ= ĠEither T . eq K ( Const . eq K ( Int . eq ()), ĠInt . eq ()) ĊĊĠĠĠ Ġtest L aws ( ĊĠĠĠĠĠ ĠDiv isible L aws . l aws ( ĊĠĠĠĠĠĠĠ ĠEither T . div isible < Const Partial Of < Int >, ĠInt >( Const . div isible ( Int . mon oid ())), ĊĠĠĠĠĠĠĠ ĠEither T . gen K ( Const . gen K ( Gen . int ()), ĠGen . int ()), ĊĠĠĠĠĠĠĠ Ġconst EQ K ĊĠĠĠĠĠ Ġ), ĊĊĠĠĠĠĠ ĠAltern ative L aws . l aws ( ĊĠĠĠĠĠĠĠ ĠEither T . alternative ( Id . mon ad (), ĠInt . mon oid ()), ĊĠĠĠĠĠĠĠ ĠEither T . gen K ( Id . gen K (), ĠGen . int ()), ĊĠĠĠĠĠĠĠ Ġid EQ K ĊĠĠĠĠĠ Ġ), ĊĊĠĠĠĠĠ ĠConcurrent L aws . l aws < Either TP art ial Of < For IO , ĠString >>( Either T . concurrent ( IO . concurrent ()), ĊĠĠĠĠĠĠĠ ĠEither T . functor ( IO . functor ()), ĊĠĠĠĠĠĠĠ ĠEither T . applic ative ( IO . applic ative ()), ĊĠĠĠĠĠĠĠ ĠEither T . mon ad ( IO . mon ad ()), ĊĠĠĠĠĠĠĠ ĠEither T . gen K ( IO . gen K (), ĠGen . string ()), ĊĠĠĠĠĠĠĠ Ġio EQ K ), ĊĊĠĠĠĠĠ ĠTra verse L aws . l aws ( Either T . traverse < For Id , ĠInt >( Id . traverse ()), ĊĠĠĠĠĠĠĠ ĠEither T . gen K ( Id . gen K (), ĠGen . int ()), ĊĠĠĠĠĠĠĠ Ġid EQ K ), ĊĊĠĠĠĠĠ ĠSem ig roup KL aws . l aws ( ĊĠĠĠĠĠĠĠ ĠEither T . sem ig roup K < For Id , ĠInt >( Id . mon ad ()), ĊĠĠĠĠĠĠĠ ĠEither T . gen K ( Id . gen K (), ĠGen . int ()), ĊĠĠĠĠĠĠĠ Ġid EQ K ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ" map Left Ġshould Ġalter Ġleft Ġinstance Ġonly " Ġ{ ĊĠĠĠĠĠ Ġfor All Ġ{ Ġi : ĠInt , Ġj : ĠInt Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġleft : ĠEither < Int , ĠInt > Ġ= ĠLeft ( i ) ĊĠĠĠĠĠĠĠ Ġval Ġright : ĠEither < Int , ĠInt > Ġ= ĠRight ( j ) ĊĠĠĠĠĠĠĠ ĠEither T ( Option ( left )). map Left ( Option . functor ()) Ġ{ Ġit Ġ+ Ġ 1 Ġ} Ġ== ĠEither T ( Option ( Left ( i Ġ+ Ġ 1 ))) Ġ&& ĊĠĠĠĠĠĠĠĠĠ ĠEither T ( Option ( right )). map Left ( Option . functor ()) Ġ{ Ġit Ġ+ Ġ 1 Ġ} Ġ== ĠEither T ( Option ( right )) Ġ&& ĊĠĠĠĠĠĠĠĠĠ ĠEither T ( Option . empty < Either < Int , ĠInt >> ()). map Left ( Option . functor ()) Ġ{ Ġit Ġ+ Ġ 1 Ġ} Ġ== ĠEither T ( Option . empty < Either < Int , ĠInt >> ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ