diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/compiler/default/phase.lux | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/stdlib/source/lux/compiler/default/phase.lux b/stdlib/source/lux/compiler/default/phase.lux index ae146be74..85567e45c 100644 --- a/stdlib/source/lux/compiler/default/phase.lux +++ b/stdlib/source/lux/compiler/default/phase.lux @@ -33,6 +33,22 @@ operation (:: error.Monad<Error> map product.right))) +(def: #export state + (All [s o] + (Operation s s)) + (function (_ state) + (#error.Success [state state]))) + +(def: #export (sub [get set] operation) + (All [s s' o] + (-> [(-> s s') (-> s' s s)] + (Operation s' o) + (Operation s o))) + (function (_ state) + (do error.Monad<Error> + [[state' output] (operation (get state))] + (wrap [(set state' state) output])))) + (def: #export fail (-> Text Operation) (|>> error.fail (state.lift error.Monad<Error>))) |