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