В настоящее время я разрабатываю функциональное приложение и придерживаюсь концепции ссылочной прозрачности.У меня есть следующая черта
trait RemoteStringStorage[F[_]]{
def getAndDeleteOnSuccess(f: String => F[Unit]): F[Unit]
}
Что getAndDeleteOnSuccess
должен сделать, это извлечь String
из некоторого удаленного хранилища и применить к нему f: String => F[Unit]
(который является чистым).В случае успеха String
следует удалить из хранилища.Я не могу разделить метод на несколько методов, так как я использую специфичный для хранилища API, который может выполнять такую операцию атомарно.
Вопрос в том, является ли такая функция чистой.Или есть какая-то причина для определения черты как
trait RemoteStringStorage[F[_]]{
def getAndDeleteOnSuccess(f: F[String => F[Unit]]): F[Unit]
}
?