Some functions that I miss in Elixir standard library (and maybe you too).
Miss Elixir library brings in a non-intrusive way some extra functions that, for different reasons, are not part of the Elixir standard library.
None of the functions in Miss Elixir has the same name of functions present in the correspondent Elixir module.
Read about the motivation to create this Elixir library in this blog post.
The package can be installed by adding miss
to your list of dependencies in mix.exs
:
def deps do
[
{:miss, "~> 0.1.5"}
]
end
The order of the Miss
namespace preceding the existing Elixir modules to be extended was made by intention. For example,
Miss.String
.
The modules in Miss Elixir are not intended to be used with aliases. Always use the entire namespace to make explicit that module/function does not belong to Elixir standard library.
# Do not do that!
alias Miss.Kernel
Kernel.div_rem(10, 2)
# Instead, use like that:
Miss.Kernel.div_rem(10, 2)
Navigate in the documentation of each module to find out all the available functions and detailed examples.
Below there are some examples.
iex> Miss.String.build(["string", 123, true])
"string123true"
iex> Miss.String.build("What ", "do you", " miss?")
"What do you miss?"
iex> Miss.Map.rename_key(%{a: 1, b: 2, c: 3}, :b, :bbb)
%{a: 1, bbb: 2, c: 3}
iex> defmodule Post do
...> defstruct [:title, :text, :date, :author, comments: []]
...> end
...>
...> defmodule Author do
...> defstruct [:id, :name]
...> end
...>
...> defmodule Comment do
...> defstruct [:text]
...> end
...>
...> post = %Post{
...> title: "My post",
...> text: "Something really interesting",
...> date: ~D[2010-09-01],
...> author: %Author{
...> id: 1234,
...> name: "Pedro Bonamides"
...> },
...> comments: [
...> %Comment{text: "Comment one"},
...> %Comment{text: "Comment two"}
...> ]
...> }
...> Miss.Map.from_nested_struct(post, [{Date, :skip}])
%{
title: "My post",
text: "Something really interesting",
date: ~D[2010-09-01],
author: %{
id: 1234,
name: "Pedro Bonamides"
},
comments: [
%{text: "Comment one"},
%{text: "Comment two"}
]
}
iex> Miss.Kernel.div_rem(45, 2)
{22, 1}
iex> defmodule User do
...> defstruct name: "User"
...> end
...>
...> Miss.Kernel.struct_list(User, [%{name: "Akira"}, %{name: "Fernando"}])
[%User{name: "Akira"}, %User{name: "Fernando"}]
iex> Miss.List.intersection([1, 2, 3, 4, 5], [0, 2, 4, 6, 8])
[2, 4]
The full documentation is available at https://hexdocs.pm/miss.
See the contributing guide.
Miss Elixir is released under the Apache 2.0 License. See the LICENSE file.
Copyright © 2020-2021 Fernando Hamasaki de Amorim