1
실행 원래 배열 arr '을 쌍 (res, arr')으로 사용합니다.는 Haskell- 내가이 기능을 얻으려고 노력 붙어 모나드 상태
ArrayState이
data ArrayState arr e a = MkArrayState (arr e -> (a, arr e))
으로 정의 내가 생각했던 :
runArrayState act arr = ((act arr), arr)
또는
runArrayState MkArrayState (\ arr -> (res, arr)) arr' = (res, arr')
하지만 모두 실패합니다. 어떤 아이디어?
'ArrayState'는 하나의 인수를 가진 하나의 생성자만을 가지고 있습니다. 거의 모든 상황에서 대신'newtype'을 사용해야합니다. – luqui
어쨌든,이 관용적 인 스타일로'ArrayState'를 정의하면'runArrayState'를 무료로 얻을 수 있습니다 :'newtype ArrayState arr e a = MkArrayState {runArrayState :: arr e -> (a, arr e)}' – luqui