2016-03-20 6 views
-1

初めてのHaskellでの作業と私は、この問題に実行し続けると「(B0、[シャア]」)期待されるタイプと一致しませんでした:は、実際の型は「[[シャア]]」

Couldn't match expected type `([Char], b0)' 
     with actual type `[[Char]]' 
In the first argument of `fst', namely `moves' 
In the second argument of `rotatedMaze', namely `(fst moves)' 

を私ができますどんなことが起こっているのかよく分かりません。パラメータエラーはどこですか?

manyPlayersManyRotations :: [[Char]] -> [[Char]] -> [[Char]] 
manyPlayersManyRotations maze moves = 
    if null moves 
     then maze 
     else 
      let  
       rmaze = rotatedMaze maze (fst moves) 
       drop1 = dropPlayer rmaze '1' 
       opor1 = (fst drop1, snd drop1) 
       drop2 = dropPlayer (fst opor1) '2' 
       opor2 = (fst drop2, snd opor2 || snd drop2) 
       drop3 = dropPlayer (fst opor2) '3' 
       opor3 = (fst drop3, snd opor2 || snd drop3) 
       drop4 = dropPlayer (fst opor3) '4' 
       opor4 = (fst drop4, snd opor2 || snd drop4) 
      in 
       if (not)(snd opor4) 
        then fst opor4 
        else manyPlayersManyRotations (fst opor4) (tail moves) 

rotatedMaze :: [[Char]] -> [Char] -> [[Char]] 
rotatedMaze maze move = 
    if move == ['c'] 
     then rc maze 
     else if move == ['c','c'] 
       then rcc maze 
        else r180 maze 

答えて

5

fstにはタプルが必要ですが、それにリストを付けました。

fstのタイプがある:

fst :: (a, b) -> a 

エラーメッセージ

Couldn't match expected type `([Char], b0)' 

の最初の行はfstへのお電話での引数の予想されるタイプは([Char], b0)であると言います。 [Char]ビットはコンテキストから推測され、b0は、その第2のタイプが何であるか気にしないことを意味します(fstは第2タプル要素を破棄するだけなので)。

エラーメッセージ

with actual type `[[Char]]' 

の2行目はまあ、それはあなたが何をやったかだ...ので、あなたは、[[Char]]代わりにそれを渡されたと言います。

fstの代わりに、おそらくheadがあります。これはリストの最初の要素です。

2

fstsnd 2つのタプルのために定義され、ここにあなたの引数がリスト[[Char]]です。

+0

ありがとうございます!そこに頭を使う必要があることを忘れてしまった。あなたは命の恩人です! – iHowell

関連する問題