howl-0.1.0.0: A small Wolfram Language interpreter and symbolic rewriting library
Safe HaskellNone
LanguageGHC2021

Howl.Builtins.ToBuiltin

Description

Convert Haskell functions into builtin Howl rules.

Synopsis

Documentation

class ToBuiltin f where #

Given a function type f, turn it into an operation on a Seq Expr, interpreted as the arguments to a symbolic function.

We provide instances for return types that can reasonably be turned into rules, where the final result type is any instance of ToExpr.

Methods

toBuiltin :: f -> Seq Expr -> Eval (Maybe Expr) #

Instances

Instances details
ToExpr a => ToBuiltin a #

A pure builtin that always matches its arguments.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: a -> Seq Expr -> Eval (Maybe Expr) #

ToExpr a => ToBuiltin (Eval (Maybe a)) #

A monadic builtin that may fail to match its arguments, signified by Nothing.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Eval (Maybe a) -> Seq Expr -> Eval (Maybe Expr) #

ToExpr a => ToBuiltin (Eval a) #

A monadic builtin that always matches its arguments.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Eval a -> Seq Expr -> Eval (Maybe Expr) #

ToExpr a => ToBuiltin (Maybe a) #

A pure builtin that may fail to match its arguments, signified by Nothing.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Maybe a -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a (Eval (Maybe b))) #

A variadic monadic builtin that may fail to match its arguments, signified by Nothing.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a (Eval (Maybe b)) -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a (Eval b)) #

A variadic monadic builtin that always matches its arguments.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a (Eval b) -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a (Maybe b)) #

A variadic pure builtin that may fail to match its arguments, signified by Nothing.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a (Maybe b) -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a b) #

A variadic pure builtin that always matches its arguments.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a b -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToBuiltin f) => ToBuiltin (a -> f) #

Provide instances for functions of the form a -> b -> ... -> r, where r is one of the return types above and a, b, ... are instances of FromExpr.

Together, these instances allow us to "lift" most reasonable Haskell functions to functions that can be used inside rules. Here are some example types that have instances for ToBuiltin:

  • Integer -> Double -> Text -> Bool
  • Symbol -> Maybe Double
  • Expr -> Integer -> Eval (Maybe Numeric)
Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: (a -> f) -> Seq Expr -> Eval (Maybe Expr) #

newtype Variadic a b #

Mark a function as variadic, i.e. as taking a Seq a of arbitrary length as its argument list.

Constructors

MkVariadic (Seq a -> b) 

Instances

Instances details
(FromExpr a, ToExpr b) => ToBuiltin (Variadic a (Eval (Maybe b))) #

A variadic monadic builtin that may fail to match its arguments, signified by Nothing.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a (Eval (Maybe b)) -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a (Eval b)) #

A variadic monadic builtin that always matches its arguments.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a (Eval b) -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a (Maybe b)) #

A variadic pure builtin that may fail to match its arguments, signified by Nothing.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a (Maybe b) -> Seq Expr -> Eval (Maybe Expr) #

(FromExpr a, ToExpr b) => ToBuiltin (Variadic a b) #

A variadic pure builtin that always matches its arguments.

Instance details

Defined in Howl.Builtins.ToBuiltin

Methods

toBuiltin :: Variadic a b -> Seq Expr -> Eval (Maybe Expr) #

def :: ToBuiltin f => Symbol -> f -> Eval () #

Define a builtin rule by converting a Haskell function into a Howl definition using ToBuiltin.

builtinDecl :: ToBuiltin f => Symbol -> f -> Decl #

Convert a Haskell function into a declaration for a builtin downvalue.