2016-08-15 12 views
1

を結合するための最良の方法である私は、このグローバルな状態ローカルおよびグローバルな状態

type GlobalState a = State Int a 

が、1つの関数は、独自のローカル状態とのアクセスを必要としてい

type LocalState a = State [String] a 

しかし、私はよそれらを組み合わせることは今確かではありません。

今、私はちょうどそれが正常に動作しますが、私はそれが私が唯一の1つの関数に局所的な状態を必要とする右のためだとは思わないグローバル

type GlobalState a = State (Int, [String]) a 

にローカルな状態を追加します。 良い方法がありますか?

答えて

2

あなたは sで使用することができます:

type LocalState a = [String] 
type GlobalState a = [String] 
newtype MyState a = StateT GlobalState (State LocalState) a 
+0

私はGET' 'とGlobalStateを読み取ることができますが、私はLocalStateどのように読むことができますか? – ais

+1

私はここでこのアプローチを使用した例を作成しました:http://lpaste.net/177413 – ErikR

+0

@ais内部モナドでアクションを実行するには、 'lift'を使います。 – arrowd

関連する問題