这是不常见的,因为每个人都在使用
State
(
scalaz
,
cats
).
如果你使用
国家
-monad(例如,从一个提到的库中),您的示例应该看起来有点像这样:
def compileAdd(
uncompiledLeftSubExpr: UncompiledExpr,
uncompiledRightSubExpr: UncompiledExpr
): State[Cache, CompiledExpr] = for {
compiledLeftSubExpr <- compileExpression(uncompiledLeftSubExpr)
compiledRightSubExpr <- compileExpression(uncompiledRightSubExpr)
} yield AddExpression(compiledLeftSubExpr, compiledRightSubExpr)
或者更确切地说
def compileAdd(
left: UncompiledExpr,
right: UncompiledExpr
): State[Cache, CompiledExpr] = for {
a <- compileExpression(left)
b <- compileExpression(right)
} yield AddExpression(a, b)
这假设
compileExpression
也有签名
def compileExpression(u: UncompiledExpr): State[Cache, CompiledExpr]
并且所有具有隐式转换的导入都提供了
for-yield
包括语法。