Packages
croma
0.3.7
0.13.0
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir macro utilities to make type-based programming easier
Current section
Files
Jump to
Current section
Files
lib/croma/list_monad.ex
defmodule Croma.ListMonad do
@moduledoc """
Implementation of `Croma.Monad` interface for built-in lists.
This empowers the following Haskell-ish syntax for loops using lists:
iex> use Croma
...> Croma.ListMonad.m do
...> i <- [1, 2, 3]
...> j <- [10, 20]
...> pure i + j
...> end
[11, 21, 12, 22, 13, 23]
"""
use Croma.Monad
@type t(a) :: [a]
@doc """
Implementation of `pure` operation of Monad (or Applicative).
Wraps the given value into a list.
"""
def pure(a), do: [a]
@doc """
Implementation of `bind` operation of Monad.
Alias to `Enum.flat_map/2`.
"""
def bind(l, f), do: Enum.flat_map(l, f)
end