diff options
Diffstat (limited to '')
-rw-r--r-- | test2.lux | 28 |
1 files changed, 24 insertions, 4 deletions
@@ -150,7 +150,7 @@ (#Failure message)) (def (return* state value) - (#Ok state value)) + (#Ok [state value])) (def (fail message) (lambda [state] @@ -158,13 +158,13 @@ (def (return value) (lambda [state] - (#Ok state value))) + (#Ok [state value]))) (def (bind m-value step) (lambda [state] (let inputs (m-value state) (case inputs - (#Ok ?state ?datum) + (#Ok [?state ?datum]) (step ?datum ?state) _ @@ -294,6 +294,19 @@ (do (print "[") (print idx) (print ":") (print x) (print "]") (print " ") (print-enum enum')))) +(def get-state + (lambda [state] + (#Ok [state state]))) + +(def monadic-dup + (exec [foo get-state + bar get-state + baz (return 1000)] + (return (+ (+ foo bar) baz)))) + +(def (run-state monad state) + (monad state)) + ## Program (def (main args) (case (' ((~ "Oh yeah..."))) @@ -313,7 +326,14 @@ (println (= false true)) (println (= true false)) (println (= true true)) - (print-enum (enumerate (list #"a" #"b" #"c" #"d" #"e")))) + (case (run-state monadic-dup 123) + (#Ok [_ ?value]) + (println ?value) + + (#Failure ?message) + (println ?message)) + (print-enum (enumerate (list #"a" #"b" #"c" #"d" #"e"))) + ) )) #( (def (main args) |