저는 하스켈을 배우면서 시선 알고리즘을 구현하는 가장 관용적 인 방법을 찾아 내려고했습니다. 내가 찾은 데모 코드는 상태 모나드를 사용하지만 재귀 적으로 상태를 전달하는 것이 나에게 더 단순 해 보인다. 내가 여기서 무엇을 놓치고 있니? 성능 문제가 있습니까? 찾기 코드 : http://www.finalcog.com/bresenham-algorithm-id
상태 모나드 "인터페이스"는 class MonadState s m where
get :: m s
put :: s -> m()
(+ 창 및 바인드) State 생성자를 사용하지 않고 주 모나드와 가능한 연산을 구성 할 수있다. 예를 들어, State $ \s -> (s+1, s-1)은 내가 ask, return 및 (>>=)을 사용하여
나는 기능이 있습니다 test :: String -> State String String
test x =
get >>= \test ->
let test' = x ++ test in
put test' >>
get >>= \test2 -> put (test2 ++ x) >>
return "test"
나는 거의이
보통 wxHaskell 프로그램이 보인다, 실행이 IO a -> IO()을 입력있다, 또한 run에서 일부 초기화 루틴이있다. data AppGlobals = AG { ... some data ... }
type MApp a = StateT AppGlobals IO a
을하지만,이 경우 GUI에서 유형 gui :: MApp AppGlobals이 있어야
나는 국가 모나드에 대한 튜토리얼을 통해 아이디어를 얻었다 고 생각합니다. this nice tutorial에서 예를 들어 : *Main> runState getRandom 0
(0,12345)
*Main> runState getRandom 0
(0,12345)
*Main> runState getRandom 1
(16838,1103527590