0

Haskell 関数を次のように記述しました。

shift :: Subst a -> Subst a
shift (S s) = [(x, (subst s' d)) | (x,d) <- s] where 
      s' = [(x,d) | (x,d) <- s, null (vars d)]

そのようなデータ型でdata Subst a = S [(String,a)]

substassubst :: Subst a -> a -> avarsasを宣言しましたvars :: a -> [String]。これを実行すると、型エラーが発生します。理由はありますか?

4

1 に答える 1

1

関数shiftは を返すように宣言されてSubstいますが、実際にはリストを返します。Substおそらく、コンストラクターをリストにラップするつもりでした。

次に、subst関数は引数を取るように宣言されてSubstいますが、リストを使用して呼び出しています-基本的に同じ問題です。

また、vars前の質問への回答で示したように、 type の意味のある関数を定義できないため、関数にもおそらく型エラーが含まれている可能性がありますa -> [String]

于 2012-11-10T00:47:26.220 に答える