Copyright | Copyright (c) 2016 the Hakaru team |
---|---|
License | BSD3 |
Maintainer | wren@community.haskell.org |
Stability | experimental |
Portability | GHC-only |
Safe Haskell | None |
Language | Haskell2010 |
Lazy partial evaluation.
BUG: completely gave up on structure sharing. Need to add that
back in. cf., gvidal-lopstr07lncs.pdf
for an approach much
like my old one.
Synopsis
- evaluate :: forall abt m p. (ABT Term abt, EvaluationMonad abt m p) => MeasureEvaluator abt m -> TermEvaluator abt m
- evaluateNaryOp :: (ABT Term abt, EvaluationMonad abt m p) => TermEvaluator abt m -> NaryOp a -> Seq (abt '[] a) -> m (Whnf abt a)
- evaluatePrimOp :: forall abt m p typs args a. (ABT Term abt, EvaluationMonad abt m p, typs ~ UnLCs args, args ~ LCs typs) => TermEvaluator abt m -> PrimOp typs a -> SArgs abt args -> m (Whnf abt a)
- evaluateArrayOp :: (ABT Term abt, EvaluationMonad abt m p, typs ~ UnLCs args, args ~ LCs typs) => TermEvaluator abt m -> ArrayOp typs a -> SArgs abt args -> m (Whnf abt a)
- class Interp a a' | a -> a' where
- reifyPair :: ABT Term abt => Head abt (HPair a b) -> (abt '[] a, abt '[] b)
Documentation
evaluate :: forall abt m p. (ABT Term abt, EvaluationMonad abt m p) => MeasureEvaluator abt m -> TermEvaluator abt m Source #
Lazy partial evaluation with some given "perform" and
"evaluateCase" functions. N.B., if p ~ 'Pure
then the
"perform" function will never be called.
Helper functions
evaluateNaryOp :: (ABT Term abt, EvaluationMonad abt m p) => TermEvaluator abt m -> NaryOp a -> Seq (abt '[] a) -> m (Whnf abt a) Source #
evaluatePrimOp :: forall abt m p typs args a. (ABT Term abt, EvaluationMonad abt m p, typs ~ UnLCs args, args ~ LCs typs) => TermEvaluator abt m -> PrimOp typs a -> SArgs abt args -> m (Whnf abt a) Source #
evaluateArrayOp :: (ABT Term abt, EvaluationMonad abt m p, typs ~ UnLCs args, args ~ LCs typs) => TermEvaluator abt m -> ArrayOp typs a -> SArgs abt args -> m (Whnf abt a) Source #