It is common to define a struct together with various functions that access that struct in the module:
defmodule Chat.Channel do defstruct name: "", public?: true def new do %Chat.Channel{name: "Untitled"} end def connect(%Chat.Channel{} = channel) do IO.inspect(channel) end end It is also common to alias the struct for easier access defmodule Chat.Channel do defstruct name: "", public?: true alias Chat.Channel # ... end But, say, renaming the module would require manually replacing all struct occurrences with the new module name. Aliasing can help, but if the last bit should be updated too(say Chat.Channel should be updated to Chat.Room) it would still require to manually replace everything. There is a workaround to use __MODULE__, but IMO the code looks a bit ugly defmodule Chat.Channel do defstruct name: "", public?: true def new do %__MODEUL__{name: "Untitled"} end def connect(%__MODEUL__{} = channel) do IO.inspect(channel) end end I think It would be great to have some kind of shortcut(syntactic sugar) to access the struct within the module. First I thought about something like %_(%%, %. etc) but this way it looks a bit cryptic def connect(%_{} = channel) do So maybe something like %self would work defmodule Chat.Channel do defstruct name: "", public?: true def new do %self{name: "Untitled"} end def connect(%self{} = channel) do IO.inspect(channel) end end What do you think? -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/da49bf41-d4ad-4fc7-a88c-1338e7a463c1n%40googlegroups.com.