我一直在努力在Haskell中构建我自己的Diplomacy模拟器来让我的脚湿润。类型/种类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)
,我得到关于我对Order的定义的错误Not in scope: type constructor or class 'Fleet'
。
这是为什么?
我该如何写单位或订单的定义(或者我应该做一些不同的事情),这使我可以要求Convoy的第一个参数是舰队,第三个参数是军队?
我对这个问题的解决方法是“甚至没有错”吗?
我是否应该在我的验证函数中使用这个函数(因为我没有办法通过Haskell指定有效的订单,据我所知,它具有表现力但不具有表现力)?
我已经尝试使用“DataKinds”,但这并没有帮助我(尽管错误postscript建议这样做,然后再次,Haskell错误postscripts提出了很多事情,所以我怀疑我需要支付太过于注意了)。
我有点糊涂的术语。你在使用数据类型时显示你的错误,但然后问如何让舰队变成一个类型类?无论如何,你会得到这个错误,因为'Fleet'不是一个类型,它是'Unit'类型的构造函数。我认为你应该重新考虑一下你的设计。另外,DataKinds绝对不是你想要的。它们是不适用于此的高级功能。 – pdexter
哦,我......有点忘了我说过。感谢那。现在更新已修复此问题 –