私の質問の要点は、移動のリストに従って遷移する決定論的状態オートマトンがあり、この一連の遷移を別の関数の「計算コンテキスト」として機能させたいということです。この別の関数は、遷移ごとにステート マシンを監視し、それを使用して何らかの計算を行います。これはモデル ビュー パターンを漠然と連想させます。自明なことですが、この他の関数は、単にマシンの現在の状態を読み取り、それを画面に出力するだけかもしれません。
ステートマシンの私の実装:
data FA n s = FA { initSt1 :: n, endSt1 :: [n], trans1 :: n -> s -> n }
-- | Checks if sequence of transitions arrives at terminal nodes
evalFA :: Eq n => FA n s -> [s] -> Bool
evalFA fa@(FA _ sfs _ ) = (`elem` sfs) . (runFA fa)
-- | Outputs final state reached by sequence of transitons
runFA :: FA n s -> [s] -> n
runFA (FA s0 sfs trans) = foldl trans s0
そして例:
type State = String
data Trans = A | B | C | D | E
fa :: FA State Trans
fa = FA ("S1") ["S4","S5"] t1
-- | Note non-matched transitions automatically goes to s0
t1 :: State -> Trans -> State
t1 "S1" E = "S1"
t1 "S1" A = "S2"
t1 "S2" B = "S3"
t1 "S2" C = "S4"
t1 "S3" D = "S5"
t1 _ _ = "S1"
runFA fa [A,B] -- | S3