私はクラス用のドミノゲームを書いています。私はカスタムタイプの周りに頭を包むことができません。私が持っている:Haskellタイプの同義語から値を抽出する
これは私にエラーを与えてロードしようとtype DomsPlayer = Hand -> Board -> (Domino,End)
...
playTurn :: DomsPlayer -> (Int, Hand, Board)
playTurn hand1 board1 = (score, hand2, board2)
where (dom, end) = simplePlayer hand1 board1
board2 = resMaybe (playDom dom board1 end)
hand2 = remove dom hand1
score = scoreBoard board2
:
Dominoes.hs:43:3: error:
• Couldn't match expected type ‘(Int, Hand, Board)’ with actual type ‘Board -> (Int, b0, Board)’
• The equation(s) for ‘playTurn’ have two arguments, but its type ‘DomsPlayer -> (Int, Hand, Board)’ has only one
| 43 | playTurn hand1 board1 = (score, hand2, board2) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
Dominoes.hs:44:37: error:
• Couldn't match type ‘Hand -> Board -> (Domino, End)’ with ‘[Domino]’
Expected type: Hand Actual type: DomsPlayer
• Probable cause: ‘hand1’ is applied to too few arguments
In the first argument of ‘simplePlayer’, namely ‘hand1’
In the expression: simplePlayer hand1 board1
In a pattern binding: (dom, end) = simplePlayer hand1 board1
| 44 | where (dom, end) = simplePlayer hand1 board1 |
私はDomsPlayerから値を取得するにはどうすればよいですか?
DomsPlayerの定義は、データ型ではなく関数の型同義語であるようです。 – Zpalmtree
あなたのタイプ 'DomsPlayer'は2つの引数(' Hand'と 'Board')の関数です。 あなたの関数 'playTurn'は、そのような' DomsPlayer'関数を引数としてとり、トリプルを返します。しかし、 'playTurn'のパターンマッチには2つの引数(' hand1'と 'board1')があります。これは一緒には合わない。 – mschmidt
私は答えを出すが、あなたを助けるために何をしようとしているのか知りたい。あなたは ''手 ''と ''理事会''を受け取りたいですか?あるいは、 ''(Domino、End) '' 'も望みますか? '' 'DomsPlayer'''は関数の同義語であるため、関数を定義していることは明らかです。 –