defmodule Plane do defstruct is_fueled?: false, has_pilot?: false def take_off(plane) do case plane do %Plane{ is_fueled?: false } -> :needs_fuel %Plane{ has_pilot?: false } -> :needs_pilot _ -> :whoosh! end end end plane = %Plane{is_fueled?: true} Plane.take_off(plane) # => :needs_pilot plane = %Plane{has_pilot?: true} Plane.take_off(plane) # => :needs_fuel plane = %Plane{has_pilot?: true, is_fueled?: true} Plane.take_off(plane) # => :whoosh!