Должно ли моделирование объектов с состоянием моделироваться с типом эффекта? - PullRequest
6 голосов
/ 05 октября 2019

При использовании функциональной среды, такой как 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]

Полагаю, все это чисто и детерминировано. Просто не ссылочно прозрачно, так как результирующий экземпляр каждый раз отличается. Это хорошее время, чтобы использовать тип эффекта? Или здесь будет другой функциональный паттерн?

...