两个替换为争论

时间:2012-11-08 20:09:40

标签: string haskell substitution

我正在编写一个Haskell函数,它将2个替换作为参数。我已经处理过如果其中一个参数是Nothing,那么该函数将返回Nothing。如果两者都不是Nothing,那么它应该将它们组合成一个替换。我做了以下事情:

args :: Maybe (Subst a) -> Maybe (Subst a) -> Maybe (Subst a)
args (Just v) (Just v') = Just (v ++ v')
args _        _         = Nothing

但是,我收到了预期类型与实际类型不匹配的错误。我很困惑为什么。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

++的类型是

(++) :: [a] -> [a] -> [a]

但您尝试将其应用于Subst a类型的两个值。

您可以像这样写一个帮助函数combineSubs

combineSubs :: Subst a -> Subst a -> Subst a
combineSubs (S xs) (S ys) = S (xs ++ ys)

您还可以在函数S的参数中对args进行模式匹配。

答案 1 :(得分:2)

只是对您的架构发表评论:

没有替换(这里是Nothing)和“空”替代S []之间真的有区别吗?如果没有,您可能应该将Maybe级别和代码丢失替换为S []。如果 存在差异,您可以考虑将此案例添加到Subst,例如data Subst a = S [(String,a)] | None