Thing
状態プロパティをA | B | C
持つ型が
あり、有効な状態遷移がであるとしA->B, A->C, C->A
ます。
私は書くことができます:
transitionToA :: Thing -> Maybe Thing
に遷移できない状態にあったNothing
場合に返されます。Thing
A
しかし、適切な型でのみ遷移を呼び出すことができるように、型と遷移関数を定義したいと思います。
別のタイプを作成するオプションがありますがAThing BThing CThing
、複雑なケースでは維持できないようです。
別のアプローチは、各状態を独自の型としてエンコードすることです。
data A = A Thing
data B = B Thing
data C = C Thing
と
transitionCToA :: C Thing -> A Thing
これは私にはきれいに思えます。しかし、A、B、C は、遷移関数を除くすべての関数をマップできるファンクターであることがわかりました。
型クラスを使用すると、次のようなものを作成できます。
class ToA t where
toA :: t -> A Thing
これはまだきれいに見えます。
Haskell と PureScript で機能する他の優先アプローチはありますか?