内部状態を処理しているときにデータ型を設計する際に問題が発生することがよくあります。私が次の定義を持っていると仮定します:
data Action a b c = Action { on :: a -> (c, b); off :: b -> a -> c }
読み取り:オンまたはオフにできるアクション(タイプaの値が必要で、タイプcの値が生成されます)。それをオフにするには、前のon
呼び出しによって与えられたタイプbの特別なデータが必要です。
次に、オンかオフかを追跡するアクションを設計します。
data StatefulAction a b c = Off (Action a b c) | On b (Action a b c)
ただし、これを使用することもできます。
data State b = Off | On b -- or type State b = Maybe b
data StatefulAction a b c = SA (Action a b c) (State b)
どちらが望ましいですか?