defmodule Plane do defstruct is_fueled?: false, has_pilot?: false def take_off(%Plane{ is_fueled?: false }), do: :needs_fuel def take_off(%Plane{ has_pilot?: false }), do: :needs_pilot def take_off(%Plane{}), do: :whoosh! 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!