При использовании функциональной среды, такой как Scala и cats-effect
, следует ли моделировать объекты с состоянием с типом эффекта?
// not a value/case class
class Service(s: name)
def withoutEffect(name: String): Service =
new Service(name)
def withEffect[F: Sync](name: String): F[Service] =
F.delay {
new Service(name)
}
Конструкция не подвержена ошибкам, поэтому мы могли бы использовать более слабыеКласс типов, например, Apply
.
// never throws
def withWeakEffect[F: Applicative](name: String): F[Service] =
new Service(name).pure[F]
Полагаю, все это чисто и детерминировано. Просто не ссылочно прозрачно, так как результирующий экземпляр каждый раз отличается. Это хорошее время, чтобы использовать тип эффекта? Или здесь будет другой функциональный паттерн?