hakaru-0.7.0: A probabilistic programming language
CopyrightCopyright (c) 2016 the Hakaru team
LicenseBSD3
Maintainerwren@community.haskell.org
Stabilityexperimental
PortabilityGHC-only
Safe HaskellNone
LanguageHaskell2010

Language.Hakaru.Evaluation.Lazy

Description

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

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 #

Helpers that should really go away

class Interp a a' | a -> a' where Source #

Methods

reify :: ABT Term abt => Head abt a -> a' Source #

reflect :: ABT Term abt => a' -> Head abt a Source #

Instances

Instances details
Interp HUnit () Source # 
Instance details

Defined in Language.Hakaru.Evaluation.Lazy

Methods

reify :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Head abt HUnit -> () Source #

reflect :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => () -> Head abt HUnit Source #

Interp HBool Bool Source # 
Instance details

Defined in Language.Hakaru.Evaluation.Lazy

Methods

reify :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Head abt HBool -> Bool Source #

reflect :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Bool -> Head abt HBool Source #

Interp 'HNat Natural Source # 
Instance details

Defined in Language.Hakaru.Evaluation.Lazy

Methods

reify :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Head abt 'HNat -> Natural Source #

reflect :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Natural -> Head abt 'HNat Source #

Interp 'HInt Integer Source # 
Instance details

Defined in Language.Hakaru.Evaluation.Lazy

Methods

reify :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Head abt 'HInt -> Integer Source #

reflect :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Integer -> Head abt 'HInt Source #

Interp 'HProb NonNegativeRational Source # 
Instance details

Defined in Language.Hakaru.Evaluation.Lazy

Methods

reify :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Head abt 'HProb -> NonNegativeRational Source #

reflect :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => NonNegativeRational -> Head abt 'HProb Source #

Interp 'HReal Rational Source # 
Instance details

Defined in Language.Hakaru.Evaluation.Lazy

Methods

reify :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Head abt 'HReal -> Rational Source #

reflect :: forall (abt :: [Hakaru] -> Hakaru -> Type). ABT Term abt => Rational -> Head abt 'HReal Source #

reifyPair :: ABT Term abt => Head abt (HPair a b) -> (abt '[] a, abt '[] b) Source #