問題:
現在、私は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をパラメータの1つとして受け取る関数があります。
問題は、どのコンストラクターを使用するかを強制できるようにしたいということです。たとえば、関数では、が呼び出されたときにコンストラクターのみを使用phaseOne
できることを保証できるようにしたいと思います。updateConfig
PhaseTwo_wc
この強制に型クラスを使用するには、次のように個別のデータコンストラクターを作成する必要があります。
data PhaseOne_wc = PhaseOne_wc BuildConfig Filename (Maybe XMLFilepath)
このルートに行くと、解決すべき別の問題があります。値として持つ他のデータ型がありWorkConfig
ますが、これに対処するにはどうすればよいですか?例えば、
type ConfigTracker = TMVar (Map CurrentPhase WorkConfig)
上記のことを念頭に置いて、希望する施行に型システムをどのように使用できますか?
ConfigTrackerは、必要なデータ型を認識できる必要があります。
*明確化:updateConfigがパラメーターとして使用できるWorkConfigを制限しようとしています。