将 State 结果包装成 Just

Wrap State result in a Just

我的 Prolog 解释器作业中有一个 Haskell 函数读取

renames :: Rule -> State ExecState [(Term, Term)]

它在 Prolog 规则中产生(几乎)变量替换(这样变量名称在统一期间不会冲突)。

此函数生成的对的形式为 (Variable "X", Variable "X_11"),这意味着变量 X 应重命名为 X_11 ,等等(重命名的计数器包含在 ExecState 中)。

问题是我已经将替换定义为

type Subst = Maybe [(Term, Term)]

这是有道理的,因为有时无法找到统一两个术语的替代。 (但总能找到重命名变量的替换。)

我试过了

renames' :: Rule -> State ExecState Subst
renames' rule = Just $ renames rule

但这显然行不通,因为我将 State 包装在 Just 中,而不是计算结果。

如何将实际的 [(Term, Term)] 结果包装在 Just 中?我想做的事情有名字吗?

谢谢!

可以使用Just <$> renames rule,其中<$>操作为fmap