2017-11-17 12 views
3

私はクラス用のドミノゲームを書いています。私はカスタムタイプの周りに頭を包むことができません。私が持っている: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から値を取得するにはどうすればよいですか?

+0

DomsPlayerの定義は、データ型ではなく関数の型同義語であるようです。 – Zpalmtree

+0

あなたのタイプ 'DomsPlayer'は2つの引数(' Hand'と 'Board')の関数です。 あなたの関数 'playTurn'は、そのような' DomsPlayer'関数を引数としてとり、トリプルを返します。しかし、 'playTurn'のパターンマッチには2つの引数(' hand1'と 'board1')があります。これは一緒には合わない。 – mschmidt

+1

私は答えを出すが、あなたを助けるために何をしようとしているのか知りたい。あなたは ''手 ''と ''理事会''を受け取りたいですか?あるいは、 ''(Domino、End) '' 'も望みますか? '' 'DomsPlayer'''は関数の同義語であるため、関数を定義していることは明らかです。 –

答えて

0

あなたがその定義

type DomsPlayer = Hand -> Board -> (Domino,End) 

playTurn :: (Hand -> Board -> (Domino,End)) -> (Int, Hand, Board) 

でこれDomsPlayerを交換する場合は、playTurnは一つのパラメータのみではなく、2をrecievesていることがわかります。

私はあなたがやろうとしているのか分からないが、明確にあなたが別々のparamsとしてHandBoardを受け取るために必要があります。

playTurn :: Hand -> Board -> ... -> (Int, Hand, Board) 

そして、私は知らない、多分もの関数を渡しますDomsPlayerと入力し、それらを別々の引数に適用します。

これはあなたのエラーです。

関連する問題