我目前正在设计功能性应用程序,并坚持引用透明性的概念。我具有以下特征
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]
}
?