问题:
目前我有一个类型WorkConfig
,看起来像这样
data WorkConfig = PhaseZero_wc BuildConfig
| PhaseOne_wc BuildConfig Filename (Maybe XMLFilepath)
| PhaseTwo_wc String
| SoulSucker_wc String
| ImageInjector_wc String
| ESX_wc String
| XVA_wc String
| VNX_wc String
| HyperV_wc String
| Finish_wc String
deriving Show
(我使用String
PhaseTwo_wc on 作为实际使用的占位符)
我有一个updateConfig
将 WorkConfig 作为其参数之一的函数。
问题是我希望能够强制使用哪个构造函数。比如在函数中phaseOne
我希望能够保证当updateConfig
被调用时,只能使用PhaseTwo_wc
构造函数。
为了使用类型类来执行此操作,我必须创建单独的数据构造函数,例如:
data PhaseOne_wc = PhaseOne_wc BuildConfig Filename (Maybe XMLFilepath)
如果我走这条路,我还有另一个问题要解决。我有其他数据类型WorkConfig
作为值,我该怎么做才能解决这个问题?例如,
type ConfigTracker = TMVar (Map CurrentPhase WorkConfig)
在记住我上面提到的内容的同时,如何使用类型系统进行我想要的强制执行?
ConfigTracker 必须能够知道我想要哪种数据类型。
*澄清:我希望限制 updateConfig 可以将哪个 WorkConfig 作为参数。