Skip to content

Instantly share code, notes, and snippets.

View eksperimental's full-sized avatar

Eksperimental eksperimental

  • Available for hire
  • Remote
View GitHub Profile
@eksperimental
eksperimental / enum_DESC.txt
Created May 12, 2022 04:22
Optimization for Enum.sort_by/3 when sorter is `:desc`.
Elixir 1.14.0-dev
Erlang 24.3
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 5 s
reduction time: 0 ns
parallel: 1
inputs: keyword_100_desc, keyword_1000_desc, keyword_10000_desc, keyword_100000_desc, map_100_desc, map_1000_desc, map_10000_desc, map_100000_desc
@eksperimental
eksperimental / enum_sort_by_default_sorter.txt
Created May 10, 2022 00:53
num.sort_by/3 -- &<=/2 vs :asc
Operating System: Linux
...
Elixir 1.14.0-dev
Erlang 24.3
...
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 2 s
memory time: 2 s
@eksperimental
eksperimental / exit_on_warning.sh
Created December 22, 2021 18:29
Exit with error INMEDIATELY if a script if a warning is generated and matches the given string.
#!/bin/bash
# Original idea taken from: https://unix.stackexchange.com/questions/556240/how-can-a-command-within-a-pipeline-abort-the-pipeline
exit_on_warning() {
sed '/atom ::: must be written between quotes, as in :"::", to avoid ambiguity/{q 2}' || kill "$BASHPID"
}
run() {
make docs_elixir
echo "Docs successfully generated!"
defmodule Variadic do
# https://elixirforum.com/t/defining-an-anonymous-function-of-dynamic-arity-not-variadic/38228/7?u=eksperimental
def spread_combine(h, f, g) do
{:arity, f_arity} = Function.info(f, :arity)
{:arity, g_arity} = Function.info(g, :arity)
args = Macro.generate_arguments(f_arity + g_arity, __MODULE__)
{f_args, g_args} = Enum.split(args, f_arity)
fn_ast =
@eksperimental
eksperimental / variadic.exs
Last active March 19, 2021 14:13
Build anonymous functions with a variable length of arguments
defmodule Variadic do
@moduledoc """
Solution for https://elixirforum.com/t/defining-an-anonymous-function-of-dynamic-arity-not-variadic/38228
"""
defmacro spread_combine(h, f, g) do
quote bind_quoted: [h: h, f: f, g: g, module: __CALLER__.module],
location: :keep do
{:arity, f_arity} = Function.info(f, :arity)
{:arity, g_arity} = Function.info(g, :arity)
@eksperimental
eksperimental / typespec_example.ex
Last active July 2, 2020 18:36
Broken types in Elixir Issue #10140
# Downloaded from: https://gist.github.com/eksperimental/55f1e207ab5878a668668546f57a3f90
#
# Lists all the types that have the problem reported in
# https://github.com/elixir-lang/elixir/issues/10140
# create an Elixir project, and save this file in lib/typespec_example.ex
# Start IEx with: iex -S mix
# then run: TypespecExample.types()
# and paste the output into the shell.
defmodule TypespecExample do
@eksperimental
eksperimental / gist:701103fc9e723fddc0bfeb757ecb1e7d
Created May 25, 2017 20:00
What modules implement the Enumerable and Collectable protocols in Elixir
Collectable
elixir$ ag "defimpl\s+Collectable" -G ".ex$"
HashDict
lib/elixir/lib/hash_dict.ex
247:defimpl Collectable, for: HashDict do
IO.Stream
lib/elixir/lib/io/stream.ex
35: defimpl Collectable do
File.Stream
@eksperimental
eksperimental / .editorconfig
Last active August 21, 2022 12:14
.editorconfig for Elixir projects
# EditorConfig is awesome: http://EditorConfig.org
# .editorconfig for Elixir projects
# https://git.io/elixir-editorconfig
# top-most EditorConfig file
root = true
[*]
indent_style = space
@eksperimental
eksperimental / record_file.exs
Created September 23, 2016 14:43
How to parse a text file with pattern matching, and converted to a nested list
# https://elixirforum.com/t/newbie-needs-help-parsing-a-file/1762
defmodule RecordFile do
def read(file) do
{:ok, data} = File.read(file)
data
|> String.split("\n")
|> filter
end
@eksperimental
eksperimental / guard_helpers.ex
Last active August 13, 2016 13:07 — forked from christhekeele/guard_helpers.ex
A defguard macro written for Elixir v0.11.something a while back. I don't remember anything breaking at the time. Written for a library that was supposed to help AST transformations, in part by creating guards for particular AST constructs.
defmodule Guard.Helpers do
@moduledoc """
Tools for creating custom guards.
"""
@doc """
Creates a macro that's aware of its presence in a guard.
Taken from https://github.com/elixir-lang/elixir/blob/df8b216357e023e4ef078be396fed6b873d6a938/lib/elixir/lib/kernel.ex#L1601-L1615,