2016-08-15 7 views
1

내가 하나 개의 기능은 GlobalState는 로컬 및 글로벌 상태

type LocalState a = State [String] a 

에 자신의 로컬 상태 및 액세스를 필요로

type GlobalState a = State Int a 

하지만 글로벌 상태가하지만 난 결합하는 가장 좋은 방법은 무엇입니까 그것들을 결합하는 것은 확실하지 않습니다.

은 지금은 단지 세계

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

그것은 잘 작동에 로컬 상태를 추가,하지만 난 단 하나 개의 기능에 로컬 상태를 필요로하기 때문에 잘 생각하지 않습니다. 더 좋은 방법이 있습니까?

답변

2

당신은 monad stack이 개 State들로 사용할 수 있습니다 :

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 내부 모나드에서 작업을 수행하려면 '리프트'를 사용하십시오. – arrowd