From 70f0cbcd07f944f0b3577a8f942695ec4745f662 Mon Sep 17 00:00:00 2001 From: Stefanos Stefanou Date: Thu, 2 Nov 2023 11:30:13 +0000 Subject: [PATCH] mapN to Apply syntax --- src/main/scala/mycats/examples/ValidatedExample.scala | 3 +-- src/main/scala/mycats/lib/syntax/ApplySyntax.scala | 4 ++++ .../scala/mycats/lib/syntax/TupleCombineOps.scala | 11 ----------- ~$diagram.drawio.dtmp | 1 + 4 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 src/main/scala/mycats/lib/syntax/TupleCombineOps.scala create mode 100644 ~$diagram.drawio.dtmp diff --git a/src/main/scala/mycats/examples/ValidatedExample.scala b/src/main/scala/mycats/examples/ValidatedExample.scala index aaf591f..b226233 100644 --- a/src/main/scala/mycats/examples/ValidatedExample.scala +++ b/src/main/scala/mycats/examples/ValidatedExample.scala @@ -5,8 +5,7 @@ import mycats.examples.common.Expense import mycats.examples.common.Utils.NonEmptyList import mycats.instances.ValidatedInstances.validatedApplicativeErrorInstance import mycats.lib.obj.Semigroup -import mycats.lib.syntax.SemigroupalSyntax -import mycats.lib.syntax.TupleCombineOps.Tuple2SemigroupalOps +import mycats.lib.syntax.ApplySyntax.Tuple2ApplyOps object ValidatedExample { type ValidatedNel[A] = Validated[NonEmptyList[String],A] val validatedNelInstance = validatedApplicativeErrorInstance[NonEmptyList[String],Long] diff --git a/src/main/scala/mycats/lib/syntax/ApplySyntax.scala b/src/main/scala/mycats/lib/syntax/ApplySyntax.scala index 8cc0917..0a3059a 100644 --- a/src/main/scala/mycats/lib/syntax/ApplySyntax.scala +++ b/src/main/scala/mycats/lib/syntax/ApplySyntax.scala @@ -6,4 +6,8 @@ object ApplySyntax { def productN[B](fb:F[B])(implicit semigroupalF:Semigroupal[F]) = semigroupalF.product(fa,fb) def productN[B,C](fb:F[B],fc:F[C])(implicit apply:Apply[F]) = apply.product2(fa,fb,fc) } + implicit class Tuple2ApplyOps[F[_],A,B](ab:Tuple2[F[A],F[B]]){ + def mapN[C](f:Tuple2[A,B]=>C)(implicit apply:Apply[F]): F[C] = + apply.map[(A,B),C](apply.product[A,B](ab._1,ab._2))(f) + } } diff --git a/src/main/scala/mycats/lib/syntax/TupleCombineOps.scala b/src/main/scala/mycats/lib/syntax/TupleCombineOps.scala deleted file mode 100644 index 92fb118..0000000 --- a/src/main/scala/mycats/lib/syntax/TupleCombineOps.scala +++ /dev/null @@ -1,11 +0,0 @@ -package mycats.lib.syntax -import mycats.lib.morphisms.Apply - -object TupleCombineOps { - - implicit class Tuple2SemigroupalOps[F[_],A,B](ab:Tuple2[F[A],F[B]]){ - def mapN[C](f:Tuple2[A,B]=>C)(implicit semigroupalWithFunctor:Apply[F]): F[C] = - semigroupalWithFunctor.map[(A,B),C](semigroupalWithFunctor.product[A,B](ab._1,ab._2))(f) - } - -} diff --git a/~$diagram.drawio.dtmp b/~$diagram.drawio.dtmp new file mode 100644 index 0000000..ae8908c --- /dev/null +++ b/~$diagram.drawio.dtmp @@ -0,0 +1 @@ +7V1bd5u4Fv4t58Gr7QNdXH15tJ2k7TQ502l6pk1fZskg25oAokKO4/n1RwKBAcnEjcHYnayuJiAJIb590dbW3krPmgaP7wiIljfYg37P1L3HnnXRM03T1gfsFy/ZZCX8lpcsCPLSMmNbcIv+gaJQF6Ur5MG41JBi7FMUlQtdHIbQpaUyQAhel5vNsV9+awQWUCq4dYEvl35FHl2mpUNzsC1/D9Fimb3Z6I/SmgBkjcWXxEvg4XWhyLrsWVOCMU2vgscp9Dl6GS7pc1c7avOBERjSfR748vHj17sf8e0P76u+jvHk9mpwrVlpLw/AX4kPFoOlmwwBglehB3knRs+arJeIwtsIuLx2zYjOypY08EW1PCgxzgdIKHwsFIlBvoM4gJRsWBNRqzmWkz4jeEbrCwTXWwIYo75otCyi74iWQFB9kfe+BYZdCGzUOH3/sunfTQdu4MJP5GN0P12OV5oxPAegnKESKV1GiklmS0g55wCUZe/LUuawAaBu7z6vvk/f3V/a3+765uz7DVoONWPUMFJzHFKhQA2zGeSsjHcEcI4j42YNVfxlOm3B1rQktgCbZlZhczqHbXAGsFXldLSvlNpNqDMlbkMJJegxA0HcYkKXeIFD4F9uSydbHHV2t21zjXEk0PsbUroR8IEVxWVs4SOi3wrXd7yrt464u3gUPSc3m+wmZJ/7rXhTeIrfbh9L7rLndtItxiviwhpoBANRQBaQ1rSz03Yct1ouINAHFD2UDa/GCTp6IeihBHW6IqjaNLO6pKj+HIoaZYoOjkpSNYjGSQmpKU1WN4w6Xs/s++wrJjPCrhb86nW0IpC9Ys5GdQOiNzVzmr7HnIZ8f4p9TJJnLc+BQ89m5TEl+B4WaobmzOr3G7Kx9LKxkC99i7OeqTAW+g3MeZ++/3bnfwmcf36/iG/7s4s//qePNUNC8cxUpNmeQFmyQH34Nlp//u3Pq6vNh8mm/4OQOGQCpZ+UQMnr/KtV6FJMFCIVnKccGXrF6lZZj23JkZIHnHOXo/bEyN5XjLqSIuVo+i8EPZSg5mnZjnqXFC3bjubzjMejklQJYv+kZjpbmunGUeQjN3212oA8x+nOMcqznaHwMbU23dUtC4s2BiM4syYUqM/Tml8BeLPfNfCG7Mp7mZcybHRZi6kbntYKOBt3eQmM0a418IGS1IBcDEclsehbg7edC4YhgXgLA7Rg0KiUkouDGQpPAErbsE8PS9XGXgrh0sggzEr45kAJwv6PFc4qtDhRKWPWwLSjx/QxUZ91dINJtERxELNGOORdoSBifZk6m8jhAhMEY5mCWQl3CCUjkIrloT5/8Ia5c/Dc0tBfzSBdQxi+emLUY/59ry7nc+hS3pYSEMZMx/C2OgqZ3mXkZP8zTA797gpzM56kZQ4uT58hDmFlrhVFMZMBFC5YgbO9+5JMH3wHTC0pDBsy95NAiCXyPBhKc1EDAqQ5FV9ALisF+ckdBI2HEKgFqN+EAMncNpVYawcbHMzXL4y3m/FqdnoN65h62pQNh0bY7B2fNJ9iMSVn/FtYIPPnD8uq5wRYwtzJEhkDZHF3GdUtmQHe44D9207LwOVPrqJkepbnN4lDdtpUHQUbVJZxA0Xs1EBFJsNoy1/c6UbmzyzjdsJfXI7V+XOfXI0JKE7E7zs4F8K0ur7el6DKdp0FgahHbb9Q9FCKDk+LotIUx92+G8Uqf4ofAEEgmffyTVCm9ZnSZ4AR7K1ceo5+yXyyypY8x4wjqNvrKdDkQyiwT31ZwG8U5/nQha6rwnk2dGynIfuuirPV+T5z5uZ60WY7550ntdnotLTZi0f/YIp2F4FTN2yVMsx90lwfygvps5uJpEgcY9C1ipSTBhLzYEwQ3SRGAMKhwjXrrgjZcDfDL0AEU5G7cVwiyAkvJc7XX5+x9WWYFbPAVKUYHdcskD2Bucrp8ZFIpjE60y15CXxDP+J22edVMJ1Zi8lg/df1dL25XlygmWI9cgMWAajddaxWhZgmQ3MPI0kDADuDMr5H3pBUx251Gl7ZRNz/k2HKBbenae9rNKnBko0mZbvO/G51oy4I0QTlS/az01LVwCHNVCU2H1eGOo1oPUruTHMyZJ6lDMlOGCZD2PfAjIdTnJ33RRKio64t6uhdQvgLAeyb4nNEeFjVUsf0I6pZuFP/1pnN9IoEJTWojbtHxKOfMErWFzvYyRhV2CT9IvFUhVPyYezFPMoTTjpN4C7zzqCdCP+9N8efwztKTBuP+N+TdQZOW6yjto469cI2oXca8cLWJX2ccGKxknM73clvJN/nZwzeA9WBgsZHVAdjQsCm0CDiYh7v1ha5wy2Luyoyy5OtNVuvba8d2t4algbELtIPbFRjySGmheSnS0KU+b4EoDirnHLAKYVBRNMbAl0eNafwTjVq2naTaq91btqqTuVJgWb986BvdwnYMiIdRhaRt6JzbtbsCs+NIxCWKJM1dFNUeYwvWcxe6ymFs19vki70JBh4DgLkb9Km76H/ACnjoUK9IlhYVKQv5TUhJgHwC3XC9az5aAHoivBT/WrbuSDa1WQtaMMrbT2dyXSfKWFItDwytPokj10Eoegy1Yw6D0DVABtRmBa7jLkgKdQhxtKheJOefWpSk4Tpz1n/2ZuSuNSUmZJjBwuvWWPilQeW98W+ZXaPWHe8z5T7NcGOpXYz4N4vEhHTKnQ07WFKQtMeiQsno2bSq8dkmAC+xaXRJXLvQxiL4aEQUZThU21boGVtu8JwSu3mPga0Co6H4sgHm6y5j0KeKvEfFERsYuUbE6rY42VyBiR785I37jmTy55zkfACyUtnaJ4H8yQpEzM2woDXcDFahYj9DIqHiDB5TSWlPja5fee6QispTlkzFGrJakst7XHGGgy9MT9fk925Pohj5JaBKc8G2zCBrU16VzJf1MZMbjptzaW7glV1QHhqnTpuLOW5QEBHQb+s7MB1Ur6klnxiTyyUnraK8tNLs55SaFpbcqkY7byWXEd0SGdrq658PT9roVcTp+st6Kqj1x4cwYBWZIwmJ0/tsp1hGCcHUE3Ti99TE7raDHggolsLu1pNIF0yTdrszns3zuLODWpDjrOS05+k7FIReNIrJrK8ZXevx48T5dJnz3SntNBDD1nRfzGzwHg8kR5H0OWmUmKwoTn7wS2iZMT65HFa6LDw+C4j5ZdKoNIcq7p2VrCVOnuztWONlaf1tpb+PHbpKgmJGvsLOCPgqby7f1+WnSZtBDqK3XQ1kzSRwFU7zxaY5BKx5QlJlizmdJwsW85OyWt5UnSOtSKdujU9r/Q57nMawcXKvU/Mo0hx8M8zMiCvUYB420m2xExTILl0sgUmSCAT88cmWW2W8/VfZHdXdr5m7Su6elv8JHtO/wQ+8hg1vbaE9zg+z+1Z97khfczI1P7n9w8g1qb0k/lXpPt27LEZcGeylh6A+8TTAwry81o4dt5w8cJBhHlYhf73KubC56P7zMcTF4OJGxMj4Ry8yD2DHHrkAn8sKgImJ8kyVEX9Mn+0kMY8qoiSpYryVh01X92Gb4y4pkIzH+Q72hu1E3HHjKoJYv39tq2ljgYVv44xqnT0bGcMu93+4Zm0+fbv91iX/wc=3Zhdb9owFIZ/TS4rJQ5x4LLQj01atVWg7uPOxE5i1YkjYwjs1+8EHJLgIm1aK7dcYb8+/nrOKxPbC2fF9l6RKn+QlAkP+XTrhTceQkHgY/hplN1BGcfxQcgUpyaoE+b8NzOib9Q1p2w1CNRSCs2roZjIsmSJHmhEKVkPw1IphrNWJGOWME+IsNXvnOrc7ALFnf6J8SxvZw7w5NBSkDbY7GSVEyrrnhTeeuFMSakPpWI7Y6KB13I59Ls703pcmGKl/psOj/yRhniz/PprUf+on37ei5RfmVE2RKzNhj2EBYw3zaEJZ01pQVbPq1aG8buWVqxOhaU6VaBfL2rPQ+9ayJpt91PqQoAQQHGllXxmMymkAqWUJUROUy7EibSqSMLLDISoqy1kBcIV8Aindc41m4PeTFWDR0GTG6ZSsc9FzillJWhKrkvKGlT+cYUQBis7izs4JhHcz2TBtNpBiOmATdqN74PQ1OvORcHEaHnfQa1fiHFudhy6Sy4UTH7/IdfIyvVNA/E0GR2J4Ay/Xp5eAVQ8BIVeAoVeAIXfilNocfrGStq4zDUqFL03ViOL1UJS6RzUKHxvoCIL1JwVPAMwFRH7/yqud//HrX88eihM0xQliXWWQgvFSxzht7Fk6Jw0tkg/kKwgH5AtDk7YItds4/MuflW+NGJjOnqJ7xgtQ/xKfOP3Zt2xbV1ZSujy8b0b+a7hTiy4n8sNHLsENoT8LwRuCh8P82g0xDwKXGNuF9DjfLcuEw27vxjKkXvK9sVt+D0hLoO0+zM5sK9N11UldpfjZuzezfaVq2HME6L5hl0O6dg9afvC1iN9q9QlHdNj97jta98TEZwSDSCRfy0ytlTkco7riXvi9vVvSpJnId2/3px+Er/lowRUu5flfVvvfT68/QM= \ No newline at end of file