| Copyright | (c) Reed Mullanix 2019 |
|---|---|
| License | BSD-style |
| Maintainer | reedmullanix@gmail.com |
| Safe Haskell | None |
| Language | Haskell2010 |
Refinery.Tactic.Internal
Description
WARNING
This module is considered internal, and can change at any given time.
Synopsis
- newtype TacticT jdg ext m a = TacticT {
- unTacticT :: StateT jdg (ProofStateT ext m) a
- mapTacticT :: Monad m => (m a -> m b) -> TacticT jdg ext m a -> TacticT jdg ext m b
- stateful :: Monad m => TacticT jdg ext m a -> (jdg -> RuleT jdg ext (StateT s m) ext) -> s -> TacticT jdg ext m a
- asRule :: Monad m => jdg -> TacticT jdg ext m a -> RuleT jdg ext m ext
- class Monad m => MonadRule jdg ext m | m -> jdg, m -> ext where
- subgoal :: jdg -> m ext
- newtype RuleT jdg ext m a = RuleT {}
- mapRuleT :: Monad m => (m a -> m b) -> RuleT jdg ext m a -> RuleT jdg ext m b
- class Monad m => MonadProvable jdg m | m -> jdg where
- proving :: jdg -> m jdg
- newtype ProvableT jdg m a = ProvableT {
- runProvableT :: m a
- type Provable jdg a = ProvableT jdg Identity a
- runProvable :: Provable jdg a -> a
Documentation
newtype TacticT jdg ext m a Source #
A is a monad transformer that performs proof refinement.
The type variables signifiy:TacticT
jdg- The goal type. This is the thing we are trying to construct a proof of.ext- The extract type. This is what we will recieve after running the tactic.m- The base monad.a- The return value. This to makea monad, and will always beTacticT'()'
Constructors
| TacticT | |
Fields
| |
Instances
| (MonadProvable jdg m, MonadState s m) => MonadState s (TacticT jdg ext m) Source # | |
| (MonadReader env m, MonadProvable jdg m) => MonadReader env (TacticT jdg ext m) Source # | |
| (MonadError err m, MonadProvable jdg m) => MonadError err (TacticT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal Methods throwError :: err -> TacticT jdg ext m a # catchError :: TacticT jdg ext m a -> (err -> TacticT jdg ext m a) -> TacticT jdg ext m a # | |
| MonadTrans (TacticT jdg ext) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadProvable jdg m => Monad (TacticT jdg ext m) Source # | |
| Monad m => Functor (TacticT jdg ext m) Source # | |
| MonadProvable jdg m => Applicative (TacticT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal Methods pure :: a -> TacticT jdg ext m a # (<*>) :: TacticT jdg ext m (a -> b) -> TacticT jdg ext m a -> TacticT jdg ext m b # liftA2 :: (a -> b -> c) -> TacticT jdg ext m a -> TacticT jdg ext m b -> TacticT jdg ext m c # (*>) :: TacticT jdg ext m a -> TacticT jdg ext m b -> TacticT jdg ext m b # (<*) :: TacticT jdg ext m a -> TacticT jdg ext m b -> TacticT jdg ext m a # | |
| (MonadIO m, MonadProvable jdg m) => MonadIO (TacticT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal | |
| (MonadThrow m, MonadProvable jdg m) => MonadThrow (TacticT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal | |
| (MonadCatch m, MonadProvable jdg m) => MonadCatch (TacticT jdg ext m) Source # | |
| MonadError err m => Alt (TacticT jdg ext m) Source # | |
mapTacticT :: Monad m => (m a -> m b) -> TacticT jdg ext m a -> TacticT jdg ext m b Source #
Map the unwrapped computation using the given function
stateful :: Monad m => TacticT jdg ext m a -> (jdg -> RuleT jdg ext (StateT s m) ext) -> s -> TacticT jdg ext m a Source #
Helper function for making "stateful" tactics like "@"
asRule :: Monad m => jdg -> TacticT jdg ext m a -> RuleT jdg ext m ext Source #
Transforms a tactic into a rule. Useful for doing things with .stateful
class Monad m => MonadRule jdg ext m | m -> jdg, m -> ext where Source #
Minimal complete definition
Nothing
Methods
subgoal :: jdg -> m ext Source #
Create a subgoal, and return the resulting extract.
subgoal :: (MonadTrans t, MonadRule jdg ext m1, m ~ t m1) => jdg -> m ext Source #
Create a subgoal, and return the resulting extract.
Instances
| MonadRule jdg ext m => MonadRule jdg ext (ProvableT env m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadRule jdg ext m => MonadRule jdg ext (ExceptT env m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadRule jdg ext m => MonadRule jdg ext (StateT env m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadRule jdg ext m => MonadRule jdg ext (ReaderT env m) Source # | |
Defined in Refinery.Tactic.Internal | |
| Monad m => MonadRule jdg ext (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal | |
newtype RuleT jdg ext m a Source #
A is a monad transformer for creating inference rules.RuleT
Instances
| Monad m => MonadRule jdg ext (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadState s m => MonadState s (RuleT jdg ext m) Source # | |
| MonadReader env m => MonadReader env (RuleT jdg ext m) Source # | |
| MonadError err m => MonadError err (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal Methods throwError :: err -> RuleT jdg ext m a # catchError :: RuleT jdg ext m a -> (err -> RuleT jdg ext m a) -> RuleT jdg ext m a # | |
| MonadExtract ext m => MonadExtract ext (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic | |
| MFunctor (RuleT jdg ext :: (Type -> Type) -> Type -> Type) Source # | |
| MonadTrans (RuleT jdg ext) Source # | |
Defined in Refinery.Tactic.Internal | |
| Functor m => Monad (RuleT jdg ext m) Source # | |
| Functor m => Functor (RuleT jdg ext m) Source # | |
| Functor m => Applicative (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal Methods pure :: a -> RuleT jdg ext m a # (<*>) :: RuleT jdg ext m (a -> b) -> RuleT jdg ext m a -> RuleT jdg ext m b # liftA2 :: (a -> b -> c) -> RuleT jdg ext m a -> RuleT jdg ext m b -> RuleT jdg ext m c # (*>) :: RuleT jdg ext m a -> RuleT jdg ext m b -> RuleT jdg ext m b # (<*) :: RuleT jdg ext m a -> RuleT jdg ext m b -> RuleT jdg ext m a # | |
| MonadIO m => MonadIO (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadThrow m => MonadThrow (RuleT jdg ext m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadCatch m => MonadCatch (RuleT jdg ext m) Source # | |
mapRuleT :: Monad m => (m a -> m b) -> RuleT jdg ext m a -> RuleT jdg ext m b Source #
Map the unwrapped computation using the given function
class Monad m => MonadProvable jdg m | m -> jdg where Source #
Minimal complete definition
Nothing
Methods
proving :: jdg -> m jdg Source #
Applies a transformation of goals at every step of the tactic.
proving :: (MonadTrans t, MonadProvable jdg m1, m ~ t m1) => jdg -> m jdg Source #
Applies a transformation of goals at every step of the tactic.
Instances
| Monad m => MonadProvable jdg (ProvableT jdg m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadProvable jdg m => MonadProvable jdg (ExceptT err m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadProvable jdg m => MonadProvable jdg (StateT s m) Source # | |
Defined in Refinery.Tactic.Internal | |
| MonadProvable jdg m => MonadProvable jdg (ProofStateT ext m) Source # | |
Defined in Refinery.Tactic.Internal Methods proving :: jdg -> ProofStateT ext m jdg Source # | |
| MonadProvable jdg m => MonadProvable jdg (ReaderT r m) Source # | |
Defined in Refinery.Tactic.Internal | |
newtype ProvableT jdg m a Source #
Helper newtype for when you don't have any need for the mechanisms of MonadProvable.
Constructors
| ProvableT | |
Fields
| |
Instances
runProvable :: Provable jdg a -> a Source #