我一直在努力在 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)
对于那些不熟悉游戏的人,命令以“保持伦敦舰队”、“移动伦敦英吉利海峡舰队”、“支援英吉利海峡舰队北大西洋中大西洋舰队”或“护航舰队英吉利海峡军队”的形式写成伦敦布雷斯特”等。
现在,将 Unit 定义为data Unit = Fleet | Army (deriving Eq, Show)
,我得到了Not in scope: type constructor or class 'Fleet'
关于 Order 定义的错误。
为什么是这样?
我应该如何编写单位或命令的定义(或者我应该做一些不同的事情),以允许我要求 Convoy 的第一个参数是舰队,第三个参数是陆军?
我对这个问题的处理方法“甚至没有错”吗?
我是否应该在我的验证功能中处理这个问题(因为据我所知,没有办法通过 Haskell 仅指定有效订单。它具有表现力但不具有表现力)?
我已经尝试过使用“DataKinds”,但这对我没有任何帮助(尽管错误后记建议这样做,但 Haskell 错误后记再次提出了很多建议,所以我怀疑我需要过多注意它)。