-module(optimist). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([from/1, is_resolved/1, is_pending/1, push/2, update/2, force/1, revert/1, resolve/2, 'try'/3, unwrap/1]). -export_type([optimistic/1]). -opaque optimistic(FVY) :: {resolved, FVY} | {pending, FVY, FVY}. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 28). -spec from(FVZ) -> optimistic(FVZ). from(Value) -> {resolved, Value}. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 42). -spec is_resolved(optimistic(any())) -> boolean(). is_resolved(Optimistic) -> case Optimistic of {resolved, _} -> true; {pending, _, _} -> false end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 57). -spec is_pending(optimistic(any())) -> boolean(). is_pending(Optimistic) -> case Optimistic of {resolved, _} -> false; {pending, _, _} -> true end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 122). -spec push(optimistic(FWF), FWF) -> optimistic(FWF). push(Optimistic, Value) -> case Optimistic of {resolved, Fallback} -> {pending, Value, Fallback}; {pending, _, Fallback@1} -> {pending, Value, Fallback@1} end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 185). -spec update(optimistic(FWI), fun((FWI) -> FWI)) -> optimistic(FWI). update(Optimistic, F) -> case Optimistic of {resolved, Fallback} -> {pending, F(Fallback), Fallback}; {pending, _, Fallback@1} -> {pending, F(Fallback@1), Fallback@1} end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 212). -spec force(optimistic(FWL)) -> optimistic(FWL). force(Optimistic) -> case Optimistic of {resolved, _} -> Optimistic; {pending, Value, _} -> {resolved, Value} end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 239). -spec revert(optimistic(FWO)) -> optimistic(FWO). revert(Optimistic) -> case Optimistic of {resolved, _} -> Optimistic; {pending, _, Fallback} -> {resolved, Fallback} end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 294). -spec resolve(optimistic(FWR), {ok, FWR} | {error, any()}) -> optimistic(FWR). resolve(Optimistic, Result) -> case Result of {ok, Value} -> {resolved, Value}; {error, _} -> revert(Optimistic) end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 343). -spec 'try'(optimistic(FWX), {ok, FWZ} | {error, any()}, fun((FWX, FWZ) -> FWX)) -> optimistic(FWX). 'try'(Optimistic, Result, F) -> case {Result, Optimistic} of {{ok, A}, {resolved, Value}} -> {resolved, F(Value, A)}; {{ok, A@1}, {pending, _, Fallback}} -> {resolved, F(Fallback, A@1)}; {{error, _}, _} -> revert(Optimistic) end. -file("/home/runner/work/optimist/optimist/src/optimist.gleam", 359). -spec unwrap(optimistic(FXE)) -> FXE. unwrap(Optimistic) -> erlang:element(2, Optimistic).