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

Howl.Expr.Internal

Description

Core expression datatypes, conversions, and low-level helpers.

Synopsis

Documentation

data Literal #

A literal value.

Constructors

LitNumeric !Numeric

A numeric literal.

LitString !Text

A string literal.

Instances

Instances details
Show Literal # 
Instance details

Defined in Howl.Expr.Internal

Eq Literal # 
Instance details

Defined in Howl.Expr.Internal

Methods

(==) :: Literal -> Literal -> Bool #

(/=) :: Literal -> Literal -> Bool #

Ord Literal # 
Instance details

Defined in Howl.Expr.Internal

PPrint Literal # 
Instance details

Defined in Howl.Expr.Internal

Methods

pPrint :: Literal -> String #

data Expr #

A Wolfram Language expression.

Constructors

ExprLit !Literal

A literal value such as a number or string.

ExprSymbol !Symbol

A symbol expression such as x, Plus, or List.

ExprApp !Expr !(Seq Expr)

An application of a head expression to a sequence of arguments.

For example:

  • Plus[1, x]
  • f[a, b, c]
  • g[x][y, z]

Instances

Instances details
IsString Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromString :: String -> Expr #

Show Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

showsPrec :: Int -> Expr -> ShowS #

show :: Expr -> String #

showList :: [Expr] -> ShowS #

Eq Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

(==) :: Expr -> Expr -> Bool #

(/=) :: Expr -> Expr -> Bool #

Ord Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

compare :: Expr -> Expr -> Ordering #

(<) :: Expr -> Expr -> Bool #

(<=) :: Expr -> Expr -> Bool #

(>) :: Expr -> Expr -> Bool #

(>=) :: Expr -> Expr -> Bool #

max :: Expr -> Expr -> Expr #

min :: Expr -> Expr -> Expr #

FromExpr Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Expr #

ToExpr Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Expr -> Expr #

PPrint Expr # 
Instance details

Defined in Howl.Expr.PPrint

Methods

pPrint :: Expr -> String #

pattern (:@) :: Expr -> Seq Expr -> Expr infixl 9 #

An infix version of ExprApp.

f :@ args is equivalent to ExprApp f args.

pattern ExprView :: FromExpr a => a -> Expr #

A general pattern synonym that matches any value with a FromExpr instance.

pattern ExprNumeric :: Numeric -> Expr #

A pattern synonym for numeric expressions.

pattern ExprInteger :: Integer -> Expr #

A pattern synonym for integer expressions.

pattern ExprRational :: Rational -> Expr #

A pattern synonym for rational expressions.

pattern ExprDouble :: Double -> Expr #

A pattern synonym for double-precision floating-point expressions.

pattern ExprBigFloat :: BigFloat -> Expr #

A pattern synonym for arbitrary-precision floating-point expressions.

pattern ExprString :: Text -> Expr #

A pattern synonym for string expressions.

class FromExpr a where #

A class for types that can potentially be matched to expressions.

Methods

fromExpr :: Expr -> Maybe a #

Instances

Instances details
FromExpr Rational # 
Instance details

Defined in Howl.Expr.Internal

FromExpr LHS # 
Instance details

Defined in Howl.Builtins.Context

Methods

fromExpr :: Expr -> Maybe LHS #

FromExpr Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Expr #

FromExpr BigFloat # 
Instance details

Defined in Howl.Expr.Internal

FromExpr Numeric # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Numeric #

FromExpr Symbol # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Symbol #

FromExpr Text # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Text #

FromExpr Integer # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Integer #

FromExpr () # 
Instance details

Defined in Howl.Expr.Syntax

Methods

fromExpr :: Expr -> Maybe () #

FromExpr Bool # 
Instance details

Defined in Howl.Expr.Syntax

Methods

fromExpr :: Expr -> Maybe Bool #

FromExpr Double # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Double #

FromExpr Int # 
Instance details

Defined in Howl.Expr.Internal

Methods

fromExpr :: Expr -> Maybe Int #

FromExpr a => FromExpr (AList a) # 
Instance details

Defined in Howl.Builtins.Types

Methods

fromExpr :: Expr -> Maybe (AList a) #

FromExpr a => FromExpr (ListOrSolo a) # 
Instance details

Defined in Howl.Builtins.Types

Methods

fromExpr :: Expr -> Maybe (ListOrSolo a) #

FromExpr a => FromExpr [a] # 
Instance details

Defined in Howl.Expr.Syntax

Methods

fromExpr :: Expr -> Maybe [a] #

(FromExpr a, FromExpr b) => FromExpr (a, b) # 
Instance details

Defined in Howl.Expr.Syntax

Methods

fromExpr :: Expr -> Maybe (a, b) #

(FromExpr a, FromExpr b, FromExpr c) => FromExpr (a, b, c) # 
Instance details

Defined in Howl.Expr.Syntax

Methods

fromExpr :: Expr -> Maybe (a, b, c) #

(FromExpr a, FromExpr b, FromExpr c, FromExpr d) => FromExpr (a, b, c, d) # 
Instance details

Defined in Howl.Expr.Syntax

Methods

fromExpr :: Expr -> Maybe (a, b, c, d) #

class ToExpr a where #

A class for types that can be converted to expressions.

Methods

toExpr :: a -> Expr #

Instances

Instances details
ToExpr Rational #

Convert a Rational into an Expr, representing it as an ExprInteger if it is an integer.

Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Rational -> Expr #

ToExpr Expr # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Expr -> Expr #

ToExpr BigFloat # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: BigFloat -> Expr #

ToExpr Numeric # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Numeric -> Expr #

ToExpr Symbol # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Symbol -> Expr #

ToExpr Text # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Text -> Expr #

ToExpr Integer # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Integer -> Expr #

ToExpr () # 
Instance details

Defined in Howl.Expr.Syntax

Methods

toExpr :: () -> Expr #

ToExpr Bool # 
Instance details

Defined in Howl.Expr.Syntax

Methods

toExpr :: Bool -> Expr #

ToExpr Double # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Double -> Expr #

ToExpr Int # 
Instance details

Defined in Howl.Expr.Internal

Methods

toExpr :: Int -> Expr #

ToExpr a => ToExpr (AList a) # 
Instance details

Defined in Howl.Builtins.Types

Methods

toExpr :: AList a -> Expr #

ToExpr a => ToExpr [a] # 
Instance details

Defined in Howl.Expr.Syntax

Methods

toExpr :: [a] -> Expr #

(ToExpr a, ToExpr b) => ToExpr (a, b) # 
Instance details

Defined in Howl.Expr.Syntax

Methods

toExpr :: (a, b) -> Expr #

(ToExpr a, ToExpr b, ToExpr c) => ToExpr (a, b, c) # 
Instance details

Defined in Howl.Expr.Syntax

Methods

toExpr :: (a, b, c) -> Expr #

(ToExpr a, ToExpr b, ToExpr c, ToExpr d) => ToExpr (a, b, c, d) # 
Instance details

Defined in Howl.Expr.Syntax

Methods

toExpr :: (a, b, c, d) -> Expr #

fullForm :: Expr -> String #

Render an expression in full form.

unary :: Expr -> Expr -> Expr #

Apply a head to a single argument.

binary :: Expr -> Expr -> Expr -> Expr #

Apply a head to two arguments.

mapSymbols :: (Symbol -> Expr) -> Expr -> Expr #

Map a function over the symbols present in an expression.

flattenWithHead :: Expr -> Seq Expr -> Seq Expr #

Flatten applications of h in the given list of expressions, working recursively until a different head is encountered. Example:

flattenWithHead A [A[x], A[A[y],B[A[z]]]] ---> [x,y,B[A[z]]]

applyOneId :: Expr -> Expr -> Seq Expr -> Expr #

Apply the OneIdentity rule with the given default element.

rootSymbol :: Expr -> Maybe Symbol #

Get the outermost symbol of an expression, if there is one.