Safe Haskell | None |
---|---|
Language | Haskell2010 |
- externals :: [External]
- fixIntroR :: (AddBindings c, BoundVars c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, HasHermitMEnv m, LiftCoreM m, MonadCatch m, MonadIO m, MonadThings m, MonadUnique m) => Rewrite c m Core
- fixIntroNonRecR :: (AddBindings c, BoundVars c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, HasHermitMEnv m, LiftCoreM m, MonadCatch m, MonadIO m, MonadThings m, MonadUnique m) => Rewrite c m CoreBind
- fixIntroRecR :: (AddBindings c, BoundVars c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, HasHermitMEnv m, LiftCoreM m, MonadCatch m, MonadIO m, MonadThings m, MonadUnique m) => Rewrite c m CoreDef
- fixComputationRuleBR :: BiRewriteH CoreExpr
- fixRollingRuleBR :: BiRewriteH CoreExpr
- fixFusionRuleBR :: Maybe (EqualityProof HermitC HermitM) -> Maybe (RewriteH CoreExpr) -> CoreExpr -> CoreExpr -> CoreExpr -> BiRewriteH CoreExpr
- isFixExprT :: TransformH CoreExpr (Type, CoreExpr)
Operations on the Fixed Point Operator (fix)
Rewrites and BiRewrites on Fixed Points
fixIntroR :: (AddBindings c, BoundVars c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, HasHermitMEnv m, LiftCoreM m, MonadCatch m, MonadIO m, MonadThings m, MonadUnique m) => Rewrite c m Core Source
fixIntroNonRecR :: (AddBindings c, BoundVars c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, HasHermitMEnv m, LiftCoreM m, MonadCatch m, MonadIO m, MonadThings m, MonadUnique m) => Rewrite c m CoreBind Source
fixIntroRecR :: (AddBindings c, BoundVars c, ExtendPath c Crumb, HasEmptyContext c, ReadBindings c, ReadPath c Crumb, HasHermitMEnv m, LiftCoreM m, MonadCatch m, MonadIO m, MonadThings m, MonadUnique m) => Rewrite c m CoreDef Source
f = e
==> f = fix (\ f -> e)
fixComputationRuleBR :: BiRewriteH CoreExpr Source
fix ty f
<==> f (fix ty f)
fixRollingRuleBR :: BiRewriteH CoreExpr Source
fix tyA (\ a -> f (g a))
<==> f (fix tyB (\ b -> g (f b))
fixFusionRuleBR :: Maybe (EqualityProof HermitC HermitM) -> Maybe (RewriteH CoreExpr) -> CoreExpr -> CoreExpr -> CoreExpr -> BiRewriteH CoreExpr Source
If f
is strict, then (f (g a)
== h (f a)
) ==> (f (fix g)
== fix h
)
Utilities
isFixExprT :: TransformH CoreExpr (Type, CoreExpr) Source
Check that the expression has the form "fix t (f :: t -> t)", returning "t" and "f".