私は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)
ゲームに慣れていない人のために、命令は「Hold Fleet London」、「Move Fleet London English Channel」、「Support Fleet English Channel Fleet North Atlantic Ocean Mid Atlantic Ocean」、または「Convoy Fleet English Channel Army」の形式で書かれています。ロンドン・ブレスト」など
さて、 Unit を として定義すると、 Order の定義に関してdata Unit = Fleet | Army (deriving Eq, Show)
エラーが発生します。Not in scope: type constructor or class 'Fleet'
どうしてこれなの?
Convoy の最初の引数が Fleet で、3 番目の引数が Army であることを要求できるようにするには、Units または Orders の定義をどのように記述すればよいでしょうか (または別のことを行う必要がありますか)。
この問題に対する私のアプローチは「間違っていない」だけですか?
検証関数でこれにアプローチする必要があります (私の知る限り、Haskell を介して有効な注文のみを指定する方法がないためです。それは表現力豊かですが、それほど表現力豊かではありません)。
私はすでに「DataKinds」を使用してみましたが、それはまったく役に立ちませんでした (エラー ポストスクリプトがそうすることを示唆しているにもかかわらず、Haskell エラー ポストスクリプトは多くのことを示唆しているため、あまり注意を払う必要があるとは思えません)それ)。