henriquesati
I’m using Mnesia with Memento. The compiler it’s warning that the return type {:error, _} | {:ok, _} will never match my with clause (I will append the code), but when I test the function, it only returns the :ok atom
def swap_pk(payload, public, new_contract) do
Logger.debug("contract: #{inspect(new_contract)}")
Logger.debug("old pk: #{payload}")
Logger.debug("new pk: #{public}")
try do
with :ok <- delete_record_by_pk(payload),
{:ok, record} <- insert_record(public, @awaiting_payment, new_contract) do
{:ok, record}
else
_ ->
Logger.error("Erro durante swap_pk")
error = FormatError.initerror("erro", "swap_pk")
{:error, error }
end
rescue
exception ->
Logger.error("swap_pk failed: #{inspect(exception)}")
{:error, exception}
end
end
@spec delete_record_by_pk(any()) :: {:error, any()} | {:ok, any()}
@doc "Deleta um registro pelo primary key."
def delete_record_by_pk(pk) do
Logger.debug("ab")
req = Memento.transaction(fn ->
Query.delete(MnesiaContract, pk)
end)
Logger.debug("delete_record_by_pk response: #{req}")
req
end
as you can see, the spec is typed as a tuple
14:38:53.970 [debug] contract: %{name: "Test Contract", value: 100}
14:38:53.978 [debug] old pk: test_pk_123
14:38:53.978 [debug] new pk: new_pk_456
14:38:53.978 [debug] ab
14:38:53.978 [debug] delete_record_by_pk response: ok
as you can see, the response is purely the :ok, but the compiler keeps typing it as a tuple
Trending in Questions
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
Hi everyone,
I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding.
I sta...
New
Hello,
I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
Documentation
While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
So my question is quite simple and i have found no conclusive answer on forum, google or AI.
Should we use :erlang.float for Integer to ...
New
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apply_graft/2 doesn’t rewrite an add_many sub-workflow’s deps on an add step. Grafted jobs cancel with “upstream job was deleted”
Version...
New
Other Trending Topics
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #ai
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex











Showing Posts 1 to 3- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
al2o3cr
If you tell Dialyzer things that aren’t true, it will believe you
I suspect fixing the return value to be
{:error, any()} | :okwill fix things.Edit: it also appears that the spec for
Memento.Transaction.executeis wrong; it’s listed as{:error, any()} | {:ok, any()}but actually comes fromMemento.Mnesia.handle_result, which can only return{:error, any()} | :ok:https://github.com/sheharyarn/memento/blob/b27a1ad654bdc9200c82d5e74e86624a03edc1d7/lib/memento/mnesia.ex#L62-L84
henriquesati
I dont know how are the type system currently working, but I do not have to type anything, it automatically types everytime I run my code. I tried to erase the incorrect typing, but it keeps generating this one
henriquesati
btw ill take a look on this answer to where i’m doing the wrong thing, thanks!