defmodule Quark do
@moduledoc ~S"""
Top-level module. Provides a convenient `use` macro for importing the most
commonly used functions and macros.
Due to performance reasons, many of the combinators are given non-combinatory
implementations (ie: not everything is expressed in terms `s` and `k`)
"""
defmacro __using__(_) do
quote do
import unquote(__MODULE__)
import Quark.Curry
import Quark.Partial
import Quark.Pointfree
end
end
defdelegate compose(a), to: Quark.Compose
defdelegate compose(a, b), to: Quark.Compose
defdelegate a <|> b, to: Quark.Compose
defdelegate fix(fun), to: Quark.FixedPoint
defdelegate flip(fun), to: Quark.BCKW
defdelegate constant(a, b), to: Quark.SKI
defdelegate id(a), to: Quark.SKI
defdelegate first(a, b), to: Quark.SKI
defdelegate second(a, b), to: Quark.SKI
defdelegate self_apply(a), to: Quark.M
defdelegate origin(a), to: Quark.Sequence
defdelegate succ(a), to: Quark.Sequence
defdelegate pred(a), to: Quark.Sequence
end