1 module Eval exposing (..)
3 import Types exposing (..)
4 import IO exposing (IO)
7 apply : Eval a -> EvalState -> EvalContext a
12 run : EvalState -> Eval a -> EvalContext a
17 withState : (EvalState -> Eval a) -> Eval a
24 putState : EvalState -> Eval ()
28 apply (succeed ()) state
31 modifyState : (EvalState -> EvalState) -> Eval ()
35 apply (succeed ()) (f state)
45 io : Cmd Msg -> (IO -> Eval a) -> Eval a
49 ( state, EvalIO cmd cont )
52 map : (a -> b) -> Eval a -> Eval b
57 ( state, EvalOk res ) ->
58 ( state, EvalOk (f res) )
60 ( state, EvalErr msg ) ->
61 ( state, EvalErr msg )
63 ( state, EvalIO cmd cont ) ->
64 ( state, EvalIO cmd (cont >> map f) )
67 andThen : (a -> Eval b) -> Eval a -> Eval b
72 ( state, EvalOk res ) ->
75 ( state, EvalErr msg ) ->
76 ( state, EvalErr msg )
78 ( state, EvalIO cmd cont ) ->
79 ( state, EvalIO cmd (cont >> andThen f) )
83 -- Debug.log "wrapping EvalIO" ( state, EvalIO cmd cont )
86 fail : String -> Eval a
90 ( state, EvalErr msg )