Slides from my talk at the Munich Elixir Meetup in January 2020 where I gave some examples of how treating the common {:ok, value} | {:error, reason} tuple as a result monad can improve our application code.
6. case foo() do
{:ok, my_foo} ->
case bar(my_foo) do
{:ok, my_bar} -> IO.puts(my_bar)
{:error, reason} -> IO.puts("also bad")
end
{:error, reason} -> IO.puts("too bad")
end
7. with {:ok, my_foo} <- foo(),
{:ok, my_bar} <- bar(my_foo)
do
IO.puts(my_bar)
else
reason -> IO.puts("bad luck")
end
10. Monads
• Wrap values
• Can “bind”
• Apply a function (that accepts an unwrapped value and
returns a wrapped value) to a wrapped value
• Read: “map”