Skip to content

Instantly share code, notes, and snippets.

View Adzz's full-sized avatar

Adam Lancaster Adzz

View GitHub Profile
%Square{side: 10}
|> Shape.area() #=> 100
defmodule EquilateralTriangle do
defstruct [:side]
end
defimpl Shape, for: EquilateralTriangle do
def area(shape) do
# some basic high school math that I've forgotten
end
end
defmodule Project do
def total_cost(shape, cost_per_square_meter) do
Shape.area(shape) * cost_per_square_meter
end
end
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
defmodule EquilateralTriangle do
defstruct [:side]
defmodule Square do
defstruct [:side]
def area(%Square{side: side}) do
side * side
end
end
defmodule Circle do
defstruct [:radius]
def area(%Circle{radius: radius}) do
radius * radius * 3.14
end
end
class Square
def initialize(side)
@side = side
end
def area()
@side * @side
end
end
class Circle
def initialize(radius)
@radius = radius
end
def area()
3.14 * @radius * @radius
end
end
Shape.area(%Square{side: 10}) #=> 100