Skip to content

Instantly share code, notes, and snippets.

@dg3feiko
Created November 30, 2016 09:18
Show Gist options
  • Save dg3feiko/47c14a7333a6c0556353f783bfdcd348 to your computer and use it in GitHub Desktop.
Save dg3feiko/47c14a7333a6c0556353f783bfdcd348 to your computer and use it in GitHub Desktop.
defmodule MyModule do
def doSomething(num) do
if num != 1 do
{:ok, num + 1}
else
{:error, "some reason"}
end
end
end
@dg3feiko
Copy link
Author

dg3feiko commented Nov 30, 2016

Try-catch style

try do
  {:ok, res1} = MyModule.doSomething(0)
  {:ok, res2} = MyModule.doSomething(res1) # error raised here, as pattern mismatching
  {:ok, res3} = MyModule.doSomething(res2)
  IO.puts res3
rescue 
  MatchError -> IO.puts "something wrong"
end

Go/C style

res1 = 
  case MyModule.doSomething(0) do
    {:ok, data} -> data
    {:error, reason} -> raise "something wrong in step 1"
  end
  
res2 = 
  case MyModule.doSomething(res1) do
    {:ok, data} -> data
    {:error, reason} -> raise "something wrong in step 2"
  end

res3 = 
  case MyModule.doSomething(res2) do
    {:ok, data} -> data
    {:error, reason} -> raise "something wrong in step 3"
  end

@jackhftang
Copy link

is it Either String Int in Haskell ? reference

@dg3feiko
Copy link
Author

Damn it, why the other part of comment was removed....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment