包裹状态结果为Just

Dav*_*vid 0 monads haskell maybe

我的Prolog解释器分配中有一个Haskell函数

renames :: Rule -> State ExecState [(Term, Term)]
Run Code Online (Sandbox Code Playgroud)

它产生(几乎)Prolog规则中的变量替换(以便变量名称在统一期间不会发生冲突).

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

问题是我已经定义了替换

type Subst = Maybe [(Term, Term)]
Run Code Online (Sandbox Code Playgroud)

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

我试过了

renames' :: Rule -> State ExecState Subst
renames' rule = Just $ renames rule
Run Code Online (Sandbox Code Playgroud)

但这显然不会起作用,因为我包装了StateJust不是计算结果.

如何将实际[(Term, Term)]结果包装在Just?我有什么名字要做吗?

谢谢!

Ry-*_*Ry- 5

您可以Just <$> renames rule<$>操作的位置使用fmap.