grisette-0.11.0.0: Symbolic evaluation as a library
Copyright(c) Sirui Lu 2021-2023
LicenseBSD-3-Clause (see the LICENSE file)
Maintainersiruilu@cs.washington.edu
StabilityExperimental
PortabilityGHC only
Safe HaskellNone
LanguageHaskell2010

Grisette.Internal.SymPrim.Prim.Internal.PartialEval

Description

 
Synopsis

Documentation

type PartialFun a b = a -> Maybe b Source #

A partial function from a to b.

type PartialRuleUnary a b = PartialFun (Term a) (Term b) Source #

A partial rule for unary operations.

type TotalRuleUnary a b = Term a -> Term b Source #

A total rule for unary operations.

type PartialRuleBinary a b c = Term a -> PartialFun (Term b) (Term c) Source #

A partial rule for binary operations.

type TotalRuleBinary a b c = Term a -> Term b -> Term c Source #

A total rule for binary operations.

totalize :: PartialFun a b -> (a -> b) -> a -> b Source #

Totalize a partial function with a fallback function.

totalize2 :: (a -> PartialFun b c) -> (a -> b -> c) -> a -> b -> c Source #

Totalize a binary partial function with a fallback function.

class UnaryPartialStrategy tag a b | tag a -> b where Source #

A strategy for partially evaluating unary operations.

Methods

extractor :: tag -> Term a -> Maybe a Source #

constantHandler :: tag -> a -> Maybe (Term b) Source #

nonConstantHandler :: tag -> Term a -> Maybe (Term b) Source #

unaryPartial :: UnaryPartialStrategy tag a b => tag -> PartialRuleUnary a b Source #

Partially evaluate a unary operation.

class BinaryCommPartialStrategy tag a c | tag a -> c where Source #

A strategy for partially evaluating commutative binary operations.

Methods

singleConstantHandler :: tag -> a -> Term a -> Maybe (Term c) Source #

class BinaryPartialStrategy tag a b c | tag a b -> c where Source #

A strategy for partially evaluating operations.

Methods

extractora :: tag -> Term a -> Maybe a Source #

extractorb :: tag -> Term b -> Maybe b Source #

allConstantHandler :: tag -> a -> b -> Maybe (Term c) Source #

leftConstantHandler :: tag -> a -> Term b -> Maybe (Term c) Source #

default leftConstantHandler :: (a ~ b, BinaryCommPartialStrategy tag a c) => tag -> a -> Term b -> Maybe (Term c) Source #

rightConstantHandler :: tag -> Term a -> b -> Maybe (Term c) Source #

default rightConstantHandler :: (a ~ b, BinaryCommPartialStrategy tag a c) => tag -> Term a -> b -> Maybe (Term c) Source #

nonBinaryConstantHandler :: tag -> Term a -> Term b -> Maybe (Term c) Source #

binaryPartial :: BinaryPartialStrategy tag a b c => tag -> PartialRuleBinary a b c Source #

Partially evaluate a binary operation.