std.effect.st.string

Types

type StringBuf s = <opaque>

Values

let new : forall r . forall s . Eff [| st : State s | r |] (StringBuf s)

The Eff monad provides composable effect via a Row of effects (r) and produces a value of type a.

let len buf : forall r s . StringBuf s -> Eff [| st : State s | r |] Int

let push_str buf str : forall r s . StringBuf s -> String -> Eff [| st : State s | r |] ()

let slice buf start end : forall r s . StringBuf s -> Int -> Int -> Eff [| st : State s | r |] String

let read buf : forall r s . StringBuf s -> Eff [| st : State s | r |] String

let { assert_eq, ? } = import! std.test
let st = import! std.effect.st
let string_buf = import! std.effect.st.string
let { (*>) } = import! std.applicative
let { Eff, run_pure, ? } = import! std.effect

let action =
    do buf = string_buf.new
    seq string_buf.push_str buf "field:"
    seq string_buf.push_str buf " "
    seq string_buf.push_str buf "123"
    string_buf.read buf
assert_eq (run_pure (st.run_state action)) "field: 123"