Allows the creation of custom SQL expressions from arbitrary string-like values.
Simply write a polymorphic function with an arbitrary number of arguments,
all of the same type, and returns a value of the same type. The type will
have instances of Monoid and IsString.
For example, to implement a function MYFUNC that takes three arguments
myFuncImpl :: (Monoid a, IsString a) => a -> a -> a -> a
Then, apply customExpr_ to your function. This will result in a function
with the same arity, that takes in and returns QGenExprs instead of
generic as.
The returned function is polymorphic in the types of SQL expressions it
will accept, but you can give it a more specific signature. For example, to
mandate that we receive two Int32s and a Text and return a Bool.
myFunc_ :: QGenExpr e ctxt s Int32 -> QGenExpr e ctxt s Int32 -> QGenExpr e ctxt s T.Text -> QGenExpr e ctxt s Bool
myFunc_ = customExpr_ myFuncImpl
Semantically, the expression builder function (myFuncImpl in this case)
is called with arguments representing SQL expressions, that, when
evaluated, will evaluate to the result of the expressions supplied as
arguments to customExpr_. See the section on
https://haskell-beam.github.io/beam/user-guide/extensibility/extensibility
in the user guide for example usage.