问题:受到挑战类型
目前,我有一种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作为什么时实际使用的占位符)
我有一个函数updateConfig
,它将WorkConfig作为它的一个参数。
问题是我想能够强制使用哪个构造函数。 例如在函数phaseOne
中,我希望能够保证当调用updateConfig
时,只能使用PhaseTwo_wc
构造函数。
为了使用一种类型的类此的执法,我将不得不作出独立的数据构造,例如:
data PhaseOne_wc = PhaseOne_wc BuildConfig Filename (Maybe XMLFilepath)
如果我走这条路,我还有一个问题要解决。我有其他的数据类型有WorkConfig
作为一个值,我会做什么来解决这个问题?例如,
type ConfigTracker = TMVar (Map CurrentPhase WorkConfig)
如何使用类型系统进行强制执行我想要,同时牢记上面提到的内容?
ConfigTracker必须能够知道我想要的数据类型。
*澄清: 我正在寻求限制哪个WorkConfig updateConfig可能作为参数。
当调用'updateConfig'时,构造函数被“使用”的含义并不十分清楚。你是否想限制什么样的'WorkConfig'可以作为参数传递给*'updateConfig'?或者保证'updateConfig' *返回由相应构造函数构成的'WorkConfig'? – Wyzard 2012-07-20 00:39:09
更新了澄清 – 2012-07-20 00:51:38
也许一个typeclass会更适合您的需求? – alternative 2012-07-20 00:52:02