You break composability.
def changeset_name(changeset, params) do
thing
|> cast(params, [:name])
|> validate_unique([:name])
end
def changeset_email(changeset, params) do
thing
|> cast(params, [:email])
|> validate_unique([:email])
end
if you do thing |> changeset_name(params) |> changeset_email(params) you’ve done 2 db requests when you could actually do it in just 1.
Ecto got rid of callbacks on the model / schema sure but that’s not what I’m talking about. I’m talking about using Ecto.Changeset — Ecto v3.14.0 which is already the spot for doing impure stuff with changeset.s
In general though in a functional language any time you take a process that’s pure and you make it impure it’s a pretty major breaking change.


















