Skip to content

RobertDober/ex_aequo_fn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI Hex.pm Hex.pm Hex.pm

ExAequoFn

Functional Tools and Helpers

Documentation

Functional helpers

const_fn

A function that returns a const

Ignoring up to 3 additional args, returning a const

    iex(1)> const_fn(1).()
    1
    iex(2)> const_fn(2, 1)
    2
    iex(3)> const_fn(:a, 1, 2)
    :a
    iex(4)> const_fn(nil, 1, :a, [])
    nil

nil_fn

Short for const_fn(nil, ...)

    iex(5)> nil_fn()
    nil
    iex(6)> nil_fn(42)
    nil
    iex(7)> nil_fn({:a, :b}, "hello")
    nil
    iex(8)> nil_fn([], "hello", %{})
    nil

tagged_fn

A function that wraps the result of const_fn into a tagged tuple

    iex(9)> tagged_fn(:alpha).("beta")
    {:alpha, "beta"}

transform_many

delegates to ExAequoFn.Transformer.many (see below for details)

Implements functional transformation helpers

many

many takes a list and a list of transsformers. A transformer is simply a function that returns either {:ok, value} or :error

The list is traversed by calling all transformers on each element of the list until the first transformer returns an {:ok, value} tuple in which case the element is replaced by value. If a transformer returning an :ok value is found for all elements, then the tuple {:ok, [transformed values,...]} is returned, otherwise :error is returned

    iex(1)> ft = %{a: 1, b: 2}
    ...(1)> st = %{a: 2, x: 3}
    ...(1)> ff = &Map.fetch(ft, &1)
    ...(1)> sf = &Map.fetch(st, &1)
    ...(1)> assert many([:a, :x], [ff, sf]) == {:ok, [1, 3]}
    ...(1)> assert many([:a, :z], [ff, sf]) == :error

Author

Copyright © 2024 Robert Dober [email protected]

LICENSE

GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 or later. Please refer to LICENSE for details.

About

Extracted the functional tools from ExAequo

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages