Cats ValidatedNec mapN с типами ошибок класса Case

Я хотел бы использовать тип данных Cats ValidatedNec аналогично примеру в документации Cats для Validated в разделе Встреча аппликативная - в моем случае я анализирую Strings из файла, проверяя соответствующее регулярное выражение для поля, а затем (для нескольких полей) преобразование в другой тип данных (при условии совпадения регулярного выражения). Однако вместо использования case objects, которые расширяют общий признак для недопустимых результатов (как в примере), я хотел бы использовать case classes (которые расширяют общий признак), чтобы я мог включать контекстную информацию в случае неудачи. Можно ли это сделать так же просто, как вызвать все методы проверки (поместить результаты в кортеж), как в примере validateForm, и вызвать mapN? Я получаю противоречивые ошибки от Intellij (от IntelliJ, он говорит мне, что ожидаемые и фактические параметры для mapN одинаковы (хотя он по-прежнему помечает это как ошибку); при запуске sbt в командной строке это не разрешается метод mapN. Я использую Scala 2.12.8 и кошек 2.0.0-M1. Буду признателен за любую помощь!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
607
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

https://gist.github.com/ДмытроМитин/6cf51c3563dba62307a2a256eeb4ebb5


«Ошибки IntelliJ» не имеют значения.

Что касается «ошибок sbt», чтобы заставить mapN работать, убедитесь, что у вас есть

import cats.syntax.apply._

Если это по-прежнему не работает, укажите свой MCVE.

У меня есть cats.syntax.apply._ импортный; ошибка, которую я получаю от sbt после вызова всех методов проверки (с результатами в кортеже), — это possible cause: maybe a semicolon is missing before value mapN'?`. Я отправлю MCVE, как только у меня будет шанс. Спасибо за ответ!

Timothy Perrigo 28.05.2019 19:34

Прошу прощения за столь долгий ответ, но вот ссылка на суть, которая воссоздает ошибку компиляции, с которой я столкнулся (ValidationExample.scala:47:35: value mapN is not a member of (ValidatorNec.this.ValidationResult[java.time.LocalDateTime]‌​, ValidatorNec.this.ValidationResult[Double]) [error] possible cause: maybe a semicolon is missing before value mapN'?`)

Timothy Perrigo 02.06.2019 17:57

@TimothyPerrigo Если вы импортировали cats.implicits._, вам не следует импортировать cats.syntax.apply._, иначе вы создадите двусмысленность. Если вы удалите импорт, ошибка будет type mismatch; found : App.Reading.type required: (java.time.LocalDateTime, Double) => App.Reading. Итак, по какой-то причине компилятор не распознает Reading как функцию.

Dmytro Mitin 02.06.2019 18:51

@TimothyPerrigo Если вы замените Reading на Reading(_,_), у вас будет type mismatch; found : java.time.LocalDateTime required: java.time.LocalDate, и вы увидите, что ваше определение класса case Reading неверно.

Dmytro Mitin 02.06.2019 18:51

@ТимотиПерриго gist.github.com/ДмытроМитин/6cf51c3563dba62307a2a256eeb4ebb5

Dmytro Mitin 02.06.2019 18:51

О боже... Прошу прощения за то, что упустил такую ​​простую вещь! Спасибо за вашу помощь!

Timothy Perrigo 03.06.2019 13:24

Другие вопросы по теме