dimitarvp

dimitarvp

Can we import types and guards from another module?

Given this module:

defmodule A do
  @type size :: pos_integer()
  defguard is_size(x) when is_integer(x) and x > 0
  def default_size(), do: 1
end

…how do we make the below work without prefixes?

defmodule B do
  @type t :: %__MODULE__{size: size()}
  defstruct [size: default_size()]
  def put_size(opts, size) when is_list(opts) and is_size(size), do: Keyword.put(opts, :size, size)
end

Tried import A and require A, both don’t get the job done.

What elementary Elixir lesson I managed to forget?

Marked As Solved

NobbZ

NobbZ

You should be able to import is_size/1 just by doing import A(, only: [is_size: 1]).

You can not import types though. The easiest way is to just alias them.

@type foo :: Foo.foo
15
Post #2

Also Liked

RobertDober

RobertDober

You might also group your types into a module like so


defmodule MyApp.Types do

    defmacro __using__(_opts) do 
          quote do
             @type greek_t :: :alpha | :beta
             @type mystruct_t :: MyApp.MyStruct.t # Beware of circulars here!!
          end
    end
...

Last Post!

RobertDober

RobertDober

You might also group your types into a module like so


defmodule MyApp.Types do

    defmacro __using__(_opts) do 
          quote do
             @type greek_t :: :alpha | :beta
             @type mystruct_t :: MyApp.MyStruct.t # Beware of circulars here!!
          end
    end
...

Where Next?

Popular in Questions Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New

We're in Beta

About us Mission Statement