私は自分の足を濡らすために私自身のDiplomacyシミュレータをHaskellで構築する作業をしてきました。私は何のためのためのまともな定義を作ってみたと信じてい種類/種類Haskell(多分)代数データ型の混乱
がある:ゲームに慣れていない方のため
data Order = Hold Unit Territory
| Move Unit Territory Territory
| Support Unit Territory Unit Territory Territory
| Convoy Fleet Territory Army Territory Territory
deriving (Eq, Show)
、注文は「艦隊ロンドンホールド」の形で書かれています、 "移動艦隊ロンドンの英語チャンネル"、 "サポート艦隊の英語チャンネル艦隊北大西洋中部大西洋"または "コンボイ艦隊英国陸軍ロンドンブレスト"など
ここでは単位の定義はdata Unit = Fleet | Army (deriving Eq, Show)
であり、私の注文の定義に関してエラーNot in scope: type constructor or class 'Fleet'
を得ています。
これはなぜですか?
私はコンボイへの最初の議論が艦隊であり、3番目の議論が軍隊であることを要求できるように、ユニットまたはオーダーの定義を書くことはできますか?
私はこの問題に対する私のアプローチでちょうど "間違っていない"と思いますか?
私はこれを私の検証関数に近づけるべきでしょうか(私が知っている限り、Haskell経由で有効な注文のみを指定する方法はないので、それは表現力豊かですが表現力がありません)?
私はすでに "DataKinds"を使ってみましたが、エラーポストスクリプトでもエラーメッセージが表示されていましたが、Haskellエラーポストスクリプトではたくさんのことが示唆されています。あまりにもそれに留意する)。
私は用語と混同しています。データ型の使用中にエラーを表示しますが、フリートをtypeclassにする方法を尋ねますか?とにかく、 'Fleet'は型ではないので、エラーが発生しています。これは' Unit'型のコンストラクタです。私はあなたのデザインを少し考え直すべきだと思います。また、 'DataKinds'は間違いなくあなたが望むものではありません。これらは、ここでは適用されない高度な機能です。 – pdexter
ああ、私はそれを言ったことを忘れていた。ありがとうございました。これを修正しました。 –