包裹状态结果为Just

时间:2017-06-12 08:52:41

标签: haskell monads maybe

我的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中?是否有我想要做的名字?

谢谢!

1 个答案:

答案 0 :(得分:5)

您可以ImageView使用Just <$> renames rule操作fmap