2

2 つの置換を引数として取る Haskell 関数を作成しています。引数のいずれかが の場合Nothing、関数は を返しNothingます。どちらも でない場合はNothing、それらを 1 つの置換に結合する必要があります。私は次のことをしました:

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

ただし、予想される型が実際の型と一致しないというエラーが表示されます。なぜだか混乱しています。何か案は?

4

2 に答える 2

3

のタイプ++

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

しかし、それを type の 2 つの値に適用しようとしていますSubst a

combineSubs次のようなヘルパー関数を作成できます。

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

S関数の引数でパターン マッチをオンにすることもできますargs

于 2012-11-08T20:19:09.833 に答える
2

あなたのアーキテクチャへのコメント:

Nothing置換なし(ここにあります)と「空の」置換の間に本当に違いはありS []ますか? そうでない場合は、おそらくMaybeレベルを削除し、欠落している置換を単純に としてコーディングする必要がありますS []違いがある場合は、このケースをSubstに追加することを検討してくださいdata Subst a = S [(String,a)] | None

于 2012-11-09T07:32:35.853 に答える