我目前正在设计一个功能性应用程序并坚持引用透明度的概念。我有以下特点
trait RemoteStringStorage[F[_]]{
def getAndDeleteOnSuccess(f: String => F[Unit]): F[Unit]
}
getAndDeleteOnSuccess
应该做的是从一些远程存储中提取 a并将String
其应用f: String => F[Unit]
(这是纯粹的)。如果成功,String
则应从存储中删除。我无法将该方法拆分为多个方法,因为我使用可以原子执行此类操作的特定于存储的 API。
问题是这样的功能是否纯粹。或者有什么理由将特征定义为
trait RemoteStringStorage[F[_]]{
def getAndDeleteOnSuccess(f: F[String => F[Unit]]): F[Unit]
}
?